文档介绍:排序算法课程设计
专 业
班 级
学 号
姓 名
指导老师
一:课程设计的目的
掌握各种排序的基本思想
掌握各种排序的算法实现
掌握各种排序的算法优劣分析花费的时间计算
掌握各种排序算法所适用的不同场合。
二:课程设计的内容
(1)冒泡、直插、选择、快速、希尔、归并、堆排序算法进行比较;
(2)待排序的元素的关键字为整数。其中的数据用伪随机产生程序产生(如10000个,1000个),再使用各种算法对其进行排序,记录其排序时间,再汇总比较;
(3)将每次测试所用的时间,用条形图进行表示,以便比较各种排序的优劣。
三:课程设计的实现
直接插入排序
#include <>
typedef int keytype;
struct datatype
{
keytype key;
};
/* int rand(void);
void srand(unsigned int seed );
*/
#include<>
#include<>
#include<>
#include<>
void InsertSort (datatype a[], int n)
//用直接插入法对a[0]--a[n-1]排序
{
int i, j;
datatype temp;
for(i=0; i<n-1; i++)
{
temp = a[i+1];
j = i;
while(j > -1 && <= a[j].key)
{
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
}
}
void main()
{
/*srand((unsigned)time(NULL));// 随机种子 */
/*time_t t;
srand((unsigned)time(&t));*/
time_t t1,t2;
srand((unsigned)GetCurrentTime());
datatype num[10000];
t1=GetCurrentTime();
for(int i=0;i<10000;i++)
{
num[i].key=rand();
}
int n=10000;
InsertSort(num,n);
for(int j=0;j<10000;j++)
cout<<num[j].key<<endl;
t2=GetCurrentTime();
cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;
getchar();
}
(2)希尔排序
#include <>
/* int rand(void);
void srand(unsigned int seed );
*/
#include<>
#include<>
#include<>
#include<>
typedef int keytype;
struct datatype
{
keytype key;
};
void ShellSort (datatype a[], int n, int d[], int numOfD)
//用希尔排序法对记录a[0]--a[n-1]排序
//各组内采用直接插入法排序
{
int i, j, k, m, span;
datatype temp;
for(m = 0; m < numOfD; m++)
{
span = d[m];
for(k = 0; k < span; k++)
{
for(i = k; i < n-span; i = i+span)
{
temp = a[i+span];
j = i;
while(j > -1 && <= a[j].key)
{
a[j+span] = a[j];