按位与例题
2023-12-16 05:46:19
需求:
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列
#include <stdio.h>
#include <stdlib.h>
void sort_accord_num_of_2radix(int*, int*, int);
int* num_of_2radix(int*, int);
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int len_arr = sizeof(arr) / sizeof(int); // ptr_array = num_of_2radix(arr, len_arr); int array[10] = { 1,1,2,1,2,2,3,1,2,2 };
int* ptr_array =num_of_2radix(arr, len_arr);
sort_accord_num_of_2radix(ptr_array, arr, len_arr);
return 0;
}
void sort_accord_num_of_2radix(int* array, int* arr, int len_arr)
{
for (int i = 9; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
int tem_array = 0, tem_arr = 0;
if (array[j] > array[j + 1])
{
tem_array = array[j];
array[j] = array[j + 1];
array[j + 1] = tem_array;
tem_arr = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tem_arr;
}
}
}
for (int k = 0; k < 10; k++)
{
printf("array[%d]=%d ", k, array[k]);
printf("arr[%d]=%d\n", k, arr[k]);
}
}
int* num_of_2radix(int* arr, int len_arr)
{
int* ptr_2radix_num = (int*)malloc(sizeof(int) * len_arr);
for (int r= 0; r< 10; r++)
{ //遍历arr所有元素
int sentry = 1, d = 0; //0001用于扫描
for (int s = 0; s < 16; s++)
{
if ((arr[r] & sentry))
{
d++;
}
sentry=sentry << 1; // printf("sentry=%d\n", sentry);
}
ptr_2radix_num[r] = d;
}
for (int a = 0; a < len_arr; a++)
{
printf("ptr_2radix_num[%d]=%d\n", a, ptr_2radix_num[a]);
}
return ptr_2radix_num;
}
文章来源:https://blog.csdn.net/weixin_46855342/article/details/135001317
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!