};
2.3、各种操作函数:
(1)创建一个数组函数:int creat();
(2)输出数组函数:void print(struct element a[20],int n); (3)保存函数:void save(struct element a[SIZE],int n, char [] ) (4)直接插入排序函数:void insert_sort(element a[], int n) (5)希尔排序函数:void shell(struct element a[20],int n);
(6)快速排序函数(分区处理函数):int hoare(struct element a[20],int l,int h); (7)非递归的快速排序函数:void quick1(struct element a[20],int n); (8)递归的快速排序函数:void quick2(struct element a[20],int l,int h); (9)堆排序(调整堆的函数):void heap(struct element a[20],int i,int m); (10)堆排序(主体函数):void heapsort(struct element a[20],int n); (11)时间函数:start = clock();end = clock();
2.4、主函数
Void main() {
接受命令(选择要执行的操作); 处理命令; 输出结果; }
3、 详细设计
3.1、程序源代码:
#include
#define SIZE 1000000
1 / 1
struct element {
int key;
}list[SIZE];
///////创建一个数组////////
int creat() {
int i,n;
int num; n=0;
printf(\请输入元素个数:\
scanf(\ for( i = 0;i < num; i++ ) { list[n].key = rand() % 10000; n++;
} return(n);
}
/////////////输出数组/////////////
void print(struct element a[SIZE],int n) {
int i;
1 / 1
for(i=0;i printf(\} /////////////保存到文件///////////// void save(struct element a[SIZE],int n, char [] ) { int m_wr=0; // 写入TXT文件变量 FILE *fp; if ( ( fp = fopen ( , \ printf(\ for (int m=0; m //////////////////// 直接插入排序/////////////////// void insert_sort(element a[], int n) { int i, j; element next; for(i=1; i 1 / 1 { } m_wr = a[m].key; fprintf ( fp, \ // 写入TXT中 fclose ( fp ); } } next = a[i]; for(j=i-1;j>=0 && next.key < a[j].key;j--) a[j+1].key=a[j].key; a[j+1]=next; printf(\输出直接插入排序的结果:\\n\ /////////////////希尔排序////////////////////// void shell(struct element a[SIZE],int n) { int i,j,k; for(i=n;i>=1;i--) a[i].key=a[i-1].key; k=n/2; while(k>=1) { for(i=k+1;i<=n;i++) { } 1 / 1 a[0].key=a[i].key; j=i-k; while((a[j].key>a[0].key)&&(j>=0)) { } a[j+k]=a[0]; a[j+k].key=a[j].key; j=j-k; } } k=k/2; for(i=0;i printf(\输出希尔排序的结果:\\n\ ////////////////////快速排序/////////////////////////// int hoare(struct element a[SIZE],int l,int h)//分区处理函数 { int i,j; struct element x; i=l; j=h; x.key=a[i].key; do { while((i j--; if(i while((i i++; a[i].key=a[j].key; i++; if(i 1 / 1