• C++-桶排/箱排


    1. 桶排序思路

    首先:桶排序是稳定的排序

    思想是空间换时间,具体的思路如下:

    排序数组1,23,666,333,111,120,999,250,585

    1. 首先按照个位数0-9开辟10个和要排序的数组大小相同的数组。

    2. 数组的元素按照个位数对应到相应的桶中。

    3. 排列完后重新按照顺序写回数组中
      在这里插入图片描述

    4. 按照十位数0-9开辟10个大小和待排数组大小相同的数组,按照十位数的0-9对应到相应的数组中。(没有十位数的按照十位数是0来处理)

    5. 排列完后重新按照顺序写回数组中
      在这里插入图片描述

    6. 因为数组中的元素是3位数,所以还要按照百位0-9重复上面的过程,最后写回数组时数组就有序了
      在这里插入图片描述

    2. C++实现桶排序

    #include
    #include
    #include
    #include
    
    using namespace std;
    
    #define SORT_NUM 5
    #define RANGE 1000
    
    int CoutDigit(int num) {
    	int ret = 0;
    	while (num) {
    		ret += 1;
    		num /= 10;
    	}
    	return ret;
    }
    
    void BucketSort(vector<int>&Array) {
    	int max_digit = CoutDigit(*max_element(Array.begin(), Array.end()));
    	//循环数组元素最大位数次
    	int flag = 1;//记录计算到第几位标记
    	for (int digit = 1; digit <= max_digit; digit++) {
    		// 创建10个箱子, 初始化为 INT_MIN
    		vector<vector<int>>Bucket(10, vector<int>(Array.size(), INT_MIN));
    		for (int pos = 0; pos < Array.size(); pos++) {
    			int idx = (Array[pos] / flag) % 10;//获取对应位的数字
    			Bucket[idx][pos] = Array[pos];
    		}
    		flag *= 10;
    		int index = 0;
    		for (int i = 0; i < 10; i++) {
    			for (int j = 0; j < Array.size(); j++) {
    				if (Bucket[i][j] != INT_MIN) {
    					Array[index++] = Bucket[i][j];
    				}
    			}
    		}
    	}
    }
    
    
    int main() {
    	srand(time(0));
    	vector<int>Array;
    	for (int i = 0; i < SORT_NUM; i++) {
    		Array.push_back(rand() % RANGE);
    		cout << Array[i] << " ";
    	}
    	cout << endl;
    	BucketSort(Array);
    	cout << "排序后:" << endl;
    	for (auto num : Array) {
    		cout << num << " ";
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    测试运行结果

    在这里插入图片描述

  • 相关阅读:
    JAVA面试所问到的问题
    电脑技巧:推荐基于浏览器的远程桌面访问控制工具
    Python3
    为什么消费返利模式层出不穷?这个消费返利玩法值得你借鉴
    天干地支对应的五行
    Log4j2的JNDI注入漏洞(CVE-2021-44228)原理分析与思考
    Netty源码编译
    ElasticSearch深浅分页查询及原理
    BSN长话短说之十一:为什么NFT会成为文化数字化的核心
    有必要发这篇文章了!
  • 原文地址:https://blog.csdn.net/dodamce/article/details/126567164