数据结构第八次上机实验——排序

一、实验目的:

  1. 掌握各种排序的基本思想。
  2. 掌握各种排序方法的算法实现。
  3. 掌握各种排序方法的优劣及花费时间的计算。
  4. 掌握各种排序方法所适应的不同场合。

二、实验内容

  1. 随机函数产生10000个随机数,用直接插入、二分插入、希尔等三种排序方法排序,并统计每一种排序所花费的时间。

三、实验要求:

  1. 根据实验内容编程,上机调试,得出正确的运行程序。
  2. 写出实验报告(包括源程序和运行结果)

预备知识

一、随机生成数

二、计算函数运行时间

代码

#include
#include
#include
using namespace std;
#define MAXSIZE 10000 //随机数范围大小 
typedef int KeyType;
typedef struct{
	KeyType key;
}RedType;
typedef struct{
	RedType r[MAXSIZE+1];
	int length;
}SqList;
//初始化L1,L2序列 
void InitSqList(SqList &L1,SqList &L2){ 
	L1.length=L2.length=MAXSIZE;
	srand(time(NULL));//设置时间种子 
	for(int i=1;i<=L1.length;i++){
		L1.r[i].key=rand();//生成随机数并赋值给L1 
		L2.r[i]=L1.r[i];//L2复制L1
	}
}
//重新恢复L1序列 
void ReInitSqList(SqList &L1,SqList &L2){
	for(int i=1;i>1;
			if(L.r[0].key=low;j--) L.r[j+1]=L.r[j];
		L.r[low]=L.r[0];
	}
}
//希尔排序 
int dt[4]={1000,100,10,1};//增值可以人为设定 
void ShellInsert(SqList &L,int dk){
	int i,j;
	for(i=dk+1;i<=L.length;i++){
		L.r[0]=L.r[i];
		for(j=i-dk;j>0&&L.r[0].key头文件里一个宏定义的常数,用来把计算得到的时间换算成多少秒
	//折半插入排序 
	ReInitSqList(L1,L2);
	start=clock();
	BInsertSort(L1);
	end=clock();
	cout<<"折半插入排序用时:"<<(double)(end-start)/CLOCKS_PER_SEC<<'s'<

运行结果

数据结构第八次上机实验——排序_第1张图片

 

可见,直接插入排序和折半插入排序相差不是很大,而希尔排序的运行时间就非常快

你可能感兴趣的:(数据结构)