排序算法——基数排序

  • 将需要排序的各个数当做元素,集合组成数组,对数组中的元素进行排序,再开辟一个临时数组的空间将数组中已有的元素数值当做临时数组的下标储存在临时数组中,然后用区别初始化值的方法区别出临时数组中待排数组的元素,以已排好的顺序存储到原始数组中完成排序。这是一种以空间换时间的排序算法,时间复杂度为O(n),该算法有局限性:①只能排正整数;②不能排重复值;③空间耗费可能巨大。
    //待排数组,将需要排序的各个数当做元素,集合组成数组
     66		43		89		98		12		18		15		23		33		50
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]	
    //临时数组,将数组中已有的元素数值当做临时数组的下标储存在临时数组中
    	//初始化临时数组,初始化的值不是待排数组中的元素的值即可
     -1		-1		-1		-1		-1		-1		-1		-1		-1		-1     
    a[0]   a[1]    ...		...		...		...		...		...    a[99]    ...
        //将数组中已有的元素数值当做临时数组的下标储存在临时数组中
      12	  15	   18		23		 33		  43	   50		66		 89		  98   
    a[12]   a[15]    a[18]    a[23]    a[33]    a[43]    a[50]    a[66]    a[89]    a[98]  
    //用区别初始化值的方法区别出临时数组中待排数组的元素,以已排好的顺序存储到原始数组中完成排序
     12		15		18		23		33		43		50		66		89		98
    a[0]   a[1]    a[2]    a[3]    a[4]    a[5]    a[6]    a[7]    a[8]    a[9]  
     
    代码:     
    //基数排序
    void radix_sort(int* a, int len, int max){
    	//先准备一个临时数组   max+1
    	int* pTemp = malloc(sizeof(int)*(max + 1));
    	//初始化   -1
    	for (int i = 0; i <= max; i++){
    		pTemp[i] = -1;
    	}
    	//把待排数组  放到临时数组中来     待排数组作为临时数组下标
    	for (int i = 0; i <len; i++){
    		pTemp[a[i]] = a[i];
    	}
    	//从临时数组中把已经排好序的数据放回来
    	int k = 0;
    	for (int i = 0; i <= max; i++){
    		if (pTemp[i] != -1){
    			a[k++] = pTemp[i];
    		}
    	}
    	//释放内存
    	free(pTemp);
    }

相关推荐

  1. 排序算法——基数排序

    2023-12-24 15:12:04       41 阅读
  2. [排序算法]基数排序

    2023-12-24 15:12:04       10 阅读
  3. 算法基数排序

    2023-12-24 15:12:04       14 阅读
  4. 程序分享--排序算法--基数排序

    2023-12-24 15:12:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-24 15:12:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-24 15:12:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-24 15:12:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-24 15:12:04       20 阅读

热门阅读

  1. C++学习——STL

    2023-12-24 15:12:04       39 阅读
  2. 60 贪心算法解优势洗牌-田忌赛马问题

    2023-12-24 15:12:04       37 阅读
  3. 8.架构设计系列:常用设计模式的实践

    2023-12-24 15:12:04       35 阅读
  4. Python 常用模块re

    2023-12-24 15:12:04       40 阅读
  5. k8s中的namespace及创建方式

    2023-12-24 15:12:04       36 阅读
  6. 单例模式的四种具体写法

    2023-12-24 15:12:04       41 阅读
  7. Python学习9

    2023-12-24 15:12:04       34 阅读
  8. Npm使用技巧

    2023-12-24 15:12:04       40 阅读
  9. 条形码数字识别的MATLAB仿真

    2023-12-24 15:12:04       36 阅读