• 2003-12-02

    计数排序(count sorting)

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://hawkman2k.blogbus.com/logs/54615.html

    〔题目〕计数排序(count sorting)。这种排存算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键码互不相同。计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c使用C语言编写实现计数排序的算法。

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    #define n 30

    int main(int argc, char* argv[])
    {
     int a[n]={0},b[n]={0},i,j,c=0;
     
     srand(time(0)); //获取随机seed
     for(i=0;i<n;i++) //数组初始化
     {
      a[i]=rand()/1000+1;
      for(j=0;j<n;j++) //判断数组元素不能相同
      {
       if(i!=j)
        if(a[i]==a[j])
        {
         i--;
         break;
        }
      }
     }

     printf("显示原始数组a\n");
     for(i=0;i<n;i++)
     {
      printf("a[%2d]=%3d  ",i,a[i]);
      if(i%5==4) printf("\n");
     }

     for(i=0;i<n;i++) //提取一个数
     {
      for(j=0;j<n;j++) //分别比较
      {
       if(a[i]>a[j]) c++; //如果找到小的则c加一
      }
      b[c]=a[i]; //将a数组已比较过的元素放到b数组的正确位置即c位置
      c=0; //c归零,重新下一个元素的比较
     }

     printf("显示排序后数组b\n");
     for(i=0;i<n;i++)
     {
      printf("b[%2d]=%3d  ",i,b[i]);
      if(i%5==4) printf("\n");
     }

     return 0;
    }


    历史上的今天:


    收藏到:Del.icio.us