(C语言)八大排序之:基数排序

reference: 基数排序 http://blog.csdn.net/hitwhylz/article/details/9970451

                 八大排序 https://www.cnblogs.com/RainyBear/p/5258483.html

基数排序radixSort: 用桶bucket进行 分配、收集。

              桶:0-9十个桶

             分配:从个位开始,将数据分配到0-9桶中

             收集:依次将0-9桶中的数据收集到原数组中

时间复杂度:O(d(r+n))   空间复杂度:O(rd+n)   。

其中,n为关键字的个数、d为关键字最大的长度、r为关键字的基数即桶的数量

              基数排序的空间复杂度较高,有两个数组的空间开销:一个存放待排序数组,一个就是所谓的桶


  1 #include 
  2 #include 
  3 
  4 void radixSort(int a[], int len);
  5 void display(int a[], int len);
  6 
  7 int main(void)
  8 {
  9         int a[] = {8,4,2,3,5,1,6,9,0,7};
 10         int len = sizeof(a)/sizeof(a[0]);
 11         radixSort(a, len);
 12 
 13         display(a, len);
 14         return 0;
 15 }
 16 // 数组中最大数的位数
 17 int maxlength(int a[], int len)
 18 {
 19         int bits = 1, p = 10, i;
 20         for(i=0; i=p)
 23                 {
 24                         p = p * 10;
 25                         bits++;
 26                 }
 27         }
 28         return bits;
 29 }
 30 
 31 // 数据num的第pos位的数字,pos=1为个位
 32 int getdigit(int num, int pos)
 33 {
 34         int temp = 1, i;
 35         for(i=0; i

你可能感兴趣的:(c)