一、目的
1.熟悉算法设计的基本思想
2.掌握计数排序(count sort)的方法
二、内容与设计思想
- 随机生成1…M范围内的N个整数;
- 编写计数排序算法;
- 在相同M的条件下,N分别等于0.1M, 0.2M, 0.5M, 1M时的运行时间;
- 在相同N的条件下,M分别等于2N,5N,10N,20N时的运行时间。
三、使用环境
推荐使用C/C++集成编译环境。
四、实验过程
1、
#include<bits/stdc++.h>
using namespace std;
#define MaxData 10000001
int a[MaxData];
int b[MaxData];
int c[MaxData]={0};
int CountingSort(int a[],int b[],int N,int k)
{
int i,j;
for (i=1;i<=N;i++)
{
c[a[i]]=c[a[i]]+1;
}
for (i=1;i<=k;i++)
{
c[i]=c[i-1]+c[i];
}
for (i=N;i>0;i--)
{
b[c[a[i]]]=a[i];
c[a[i]]--;
}
}
int main()
{
int N,M,i;
cin>>N>>M;
srand(time(0));
for (i=1;i<=N;i++)
{
a[i]=rand()%M+1;
}
int Max=a[1];
for (i=1;i<=N;i++)
{
if (a[i]>Max)
{
Max=a[i];
}
}
int k=Max;
clock_t startTime,endTime;
startTime = clock();
CountingSort(a,b,N,k);
endTime = clock();
cout << "The run time is:" <<(double)(1000*(endTime - startTime) / CLOCKS_PER_SEC) << "ms" << endl;
return 0;
}
2、分别画出各个实验结果的折线图