快速排序 选择排序 堆排序 基数排序 O(n2) O(n2) O(n*log2n) O(n*log2n) O(n*log2n) O(n2) O(n*log2n) O(n2) 不稳定 稳定 不稳定 稳定 10000个数据的时间比较: 算法名称 直接插入排序 折半插入排序 起泡排序 快速排序 选择排序 堆排序 基数排序 用时 0.25 0.219 0.704 0.016 0.39 0.0001 0.016 六、测试用例
1、首先选择需要排序的数字个数,比如输入5000。
. . .
2、系统显示出随机产生的随机数。
用户选择排序方式,比如选择1.直接插入排序
3、系统将随机数排序后整齐的显示出来。
4、用户可以选择继续排序或者退出系统。
七、程序源代码
/**********************************************************************************************
第六题:排序算法比较
设计要求:利用随机函数产生N个随机整数(N = 500,1000,1500,2000,2500,…,30000),
. . .
利用直接插入排序、折半插入排序,起泡排序、快速排序、||选择排序、堆排序,基数排序七种排序方法
(可添加其它排序方法)进行排序(结果为由小到大的顺序),并统计每一种排序所耗费的时间(统计
为图表坐标形式)。
************************************************************************************************/ #include \#include \
#include \计时
#define ERROR 0 #define OK 1
#define OVERFLOW -2
#define MAXSIZE //用户自己规定排序的数字的长度
typedef int Status;
typedef struct {
int *r; // r[0]闲置
int length; //顺序表的总长度 }Sqlist;
//构造一个空线性表
Status InitSqlist(Sqlist &L) { L.r=(int *)malloc(MAXSIZE*sizeof(int)); //分配存储空间 if(!L.r) { printf(\存储分配失败!\ exit(0); } //存储分配失败 L.length=0;//初始长度为0 return OK; }
//输入随机数并显示在界面上
Status ScanfSqlist(int &N,Sqlist &L) { int i;