-
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;
}随机文章:
经典C++双向冒泡排序算法 2003-12-09求100以内的素数 2003-12-02报数退出问题 2003-12-02程序员与妓女的共同点和不同点(转贴,一笑而已) 2004-05-11模拟键盘响应 2003-12-11
收藏到:Del.icio.us







