分配排序之--基数排序

来源:互联网 发布:sql server2005卸载 编辑:程序博客网 时间:2024/05/17 01:02
#include<stdio.h>#include<malloc.h>#define MAXNUM 1000//******************************************基数排序**********************************************************int getdigit(int x,int d)  {       int a[] = {1, 1, 10, 100};   //最大三位数,所以这里只要百位就满足了。    return (x/a[d]) % 10;  }  void Radix_Sort(int A[], int n,int d){  int radix=10;    int *Bucket = (int *)malloc(sizeof(int)*radix); //可以 int Bucket[MAXNUM]    int *Result = (int *)malloc(sizeof(int)*n);  //不能 int Result[n],n没确定for(int k=1;k<=d;k++){for (int i = 0; i < radix; i++)    //把1000个桶初始化Bucket[i] = 0;for (i = 0; i < n; i++) Bucket[ getdigit(A[i],k) ] ++;                    // Bucket[A[i]]---值=A[i]的个数for (i = 1; i < radix; i++)Bucket[i] = Bucket[i - 1] + Bucket[i];       //Bucket[i]---值<=i的个数 for (i = n - 1; i >= 0; i--) Result[--Bucket[getdigit(A[i],k)] ] = A[i];        //排序for (i = 0; i < n; i++)      A[i] = Result[i];               //输出到原始数组}free(Bucket); free(Result);} //*************************************************测试**********************************************void  main(){    int n;printf("请输入待排序的个数:");scanf("%d",&n); int *A = (int *)malloc(sizeof(int)*n);printf("输入排序前:\n");for (int i = 0; i < n; i++)        scanf("%d",&A[i]);    Radix_Sort(A, n, 3);printf("输出排序后:\n");for (i = 0; i < n; i++)        printf("%d ", A[i]);  //等价于 *(A+i)getchar();getchar();}

原创粉丝点击