3、系统将随机数排序后整齐的显示出来。
4、用户可以选择继续排序或者退出系统。
七、程序源代码
/********************************************************************************************** 第六题:排序算法比较
设计要求:利用随机函数产生N个随机整数(N = 500,1000,1500,2000,2500,…,30000),
利用直接插入排序、折半插入排序,起泡排序、快速排序、||选择排序、堆排序,基数排序七种排序方法
(可添加其它排序方法)进行排序(结果为由小到大的顺序),并统计每一种排序所耗费的时间(统计
为图表坐标形式)。
************************************************************************************************/ #include \#include \
#include \中折半查找有序插入的位置 { mid=(low+high)/2; if[0]<[mid]) high]的记录,使得枢轴记录到位,并返回其所在位置,此时在它之前(后)的记录均不大于它 { int pivotkey; i]中最后一个记录互换 [1]=[i]; [i]=t; HeapAdjust(L,1,i-1); i-1]重新调整为大顶堆
} return OK; }
//************************************************** // 基数排序
//************************************************** typedef struct node{ int key; node *next; }RecType;
Status RadixSort(Sqlist L) { int t,i,j,k,d,n=1,m; RecType *p,*s,*q,*head[10],*tail[10]; //定义各链队的首尾指针 for(i=1;i<=;i++) //将顺序表转化为链表 { s=(RecType*)malloc(sizeof(RecType)); s->key=[i]; if(i==1) //当为第一个元素时 { q=s; p=s; t++; } else { q->next=s; //将链表连接起来 q=s; t++; } q->next=NULL; } d=1; while(n>0) //将每个元素分配至各个链队 { for(j=0;j<10;j++) //初始化各链队首、尾指针 { head[j] = NULL; tail[j] = NULL; } while(p!=NULL) //对于原链表中的每个结点循环 { k=p->key/d;
}
k=k; if(head[k]==NULL) //进行分配 { head[k]=p; tail[k]=p; } else { tail[k]->next=p; tail[k]=p; } p=p->next; //取下一个待排序的元素 }
p=NULL; //用于收集第一个元素时的判断
for(j=0;j<10;j++) //对每一个链队循环, 搜集每一个元素 { if(head[j]!=NULL) //进行搜集 { if(p==NULL) { p=head[j]; q=tail[j]; } else { q->next=head[j]; q=tail[j]; } } }
q->next=NULL; //最后一个结点的next置为空 d=d*10; n=0; m=1;
while(m<= //判断当L中的元素都除d后是不是都为零了 { if([m]/d)!=0) { n++; m++; } else m++; }
i=1; while(p!=NULL) //将链表转换为顺序表 { [i]=p->key; i++; p=p->next; } return OK; }
//************************************** // 主函数 //************************************** void main() { Sqlist L; Sqlist L0; InitSqlist(L); //初始化L InitSqlist(L0); int m,i; char choice='z'; clock_t start, finish; //定义clock_t用于计时 double duration; //向L中输入元素 printf(\n █████████████████████████████████████\\n\ printf(\ \\n\ printf(\ 算法排序比较系统 \\n\ printf(\ \\n\ printf(\ █████████████████████████████████████\\n\ printf(\ 以下是各个排序算法的代号:\\n\\n\ printf(\ 1、直接插入排序 \\n\ printf(\ 2、折半插入排序 \\n\ printf(\ 3、起泡排序 \\n\ printf(\ 4、快速排序\\n\ printf(\ 5、选择排序\\n\ printf(\ 6、堆排序\\n\ printf(\ 7、基数排序\\n\ printf(\ 8、退出该系统\\n\\n\ ScanfSqlist(m,L0); printf(\ printf(\ 1、直接插入排序 \\n\ printf(\ 2、折半插入排序 \\n\
相关推荐: