基数排序!一种美妙实用高效的排序算法!
2013-12-24 23:02
246 查看
不用递归也能实现像递归那样的高速度排序!而你所要排序的数组的元素值在一个差不多是连续序列时就可以考虑用基数排序,如果对这个算法不清楚的人可以百度一下或者到《算法导论》查看一下相关内容。下面来看一下实例,如果要逆序输出,只要在输出时从末尾开始输出即可不需要改动基数排序的代码。
/* 欲详知本程序,请阅读《算法导论》中关于基数排序的章节? */ #include "stdio.h" #include "conio.h" #include "math.h" #define true 1 #define false 0 #define N 10 //N代表数组长度,C语言没有length属性,只能人为地宏定义一个参数? void radix_sort(int A[],int d) //d表示数组A元素的每个元素一共由d位组成 { int i=1,j,B[N+1]; for(i=1;i<=d;i++) { count_sort(A,B,9,i); for(j=1;j<=N;j++) { A[j]=B[j]; } } return ; } int count_sort(int A[],int B[],int k,int d) //k为输入数组的最大值 { int i,j=(int)pow(10,(d-1)); int C[10],temp[N+1]; //这里不能用k表示长度,因为C语言不允许定义时用变量作为数组长度 for(i=0;i<=k;i++) { C[i]=0; } for(i=1;i<=N;i++) { //这个是利用了C语言整数相除只留整数部分的原理? temp[i]=(int)((A[i]/j*j-A[i]/(j*10)*(j*10)) / j ) ; } for(i=1;i<=N;i++) { C[temp[i]]=C[temp[i]]+1; } for(i=1;i<=k;i++) { C[i]=C[i-1]+C[i]; } for(i=1;i<=N;i++) { B[C[temp[i]]]=A[i]; C[temp[i]]--; } return 1; } main() { /*0号元素不参加排序Wⅰ注意turbo c下有符号整形数的数值范围是-32768~32767 无符号整形数的范围是0~65536 */ int a[N+1]={0,329,457,657,839,436,720,355,210,531,123},i,b[N+1]; radix_sort(a,3); //表示待排序的数组元素是3位元素 //printf("\nthe result is nextline ,please think it quickly\n"); for(i=1;i<=N;i++) { printf("\na[%d]=%d ",i,a[i]); } getch(); }
相关文章推荐
- Java实现-高效排序算法之基数排序
- 基数排序,一种很费内存但是快得一塌糊涂的排序算法。
- 经典排序算法 - 基数排序Radix sort
- 排序算法之基数排序
- 经典排序算法 - 基数排序Radix sort
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 排序——高效排序算法
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法 基数排序
- 排序算法之基数排序 - JavaScript实现
- 经典排序算法 - 基数排序Radix sort
- 排序算法(八)——基数排序
- 软考之排序算法(四)——归并排序、基数排序
- 排序算法java 二 --基数排序、归并排序
- Java排序算法以及算法改进总结(计数排序、基数排序、桶排序)
- Java排序算法(十一):基数排序
- 高效排序算法(快排序)
- 【排序算法】之基数排序
- 排序算法之基数排序
- 排序算法(计数排序,基数排序,桶排序)