按位与例题

需求:

给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。

如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列

来自:位运算之按位与-CSDN博客

cpp 复制代码
#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;
}
相关推荐
海绵宝宝转agent33 分钟前
leetCode100算法开源笔记分享
笔记·算法
写后端的胖头鱼1 小时前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
多弗朗皮卡丘1 小时前
数据结构番外:环形队列
数据结构·c
hahaha60161 小时前
黑体轨迹和色温--光源白点
人工智能·嵌入式硬件·算法·计算机视觉
海绵宝宝转agent1 小时前
基于Redis ZSet+AOP+注解实现限流注解算法
数据库·redis·算法
50万马克的面包2 小时前
顺序表和链表_精华知识点_CSDN博客
数据结构·链表
All for pursuit.2 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青2 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq2 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq2 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询