数据结构课程设计-排序算法演示系统(2)

2019-08-31 23:47

printf(\请选择:\scanf(\getchar();

for(i=1;i<=L;i++) { R[i].key=S[i].key; }

switch(ch2) {

case '1': printf(\请输入%d个待排序数据\\n\\t\\t\ for(i=1;i<=L;i++) { scanf(\ getchar(); printf(\ } printf(\数据输入完毕!\ break; case '2': Insertsort(); break; case '3': Shellsort(); break; case '4': Bubblesort(); break; case '5': printf(\原始数据为(按回车键开始排序):\\n\\t\\t\ for(k=1;k<=L;k++) { printf(\ } getchar(); printf(\ num=0;sun=0;sum=0; Quicksort(1,L); printf(\排序最终结果是:\\n\\t\\t\ for(k=1;k<=L;k++) { printf(\ } printf(\比较次数是:%d\\n\\t\\t\

- 3 -

}

printf(\交换次数是:%d\\n\\t\\t\ break; case '6': Selectsort(); break; case '7': Heap(); break; case '8': Mergesort(); break; case '0': ch1='n'; break; default: system(\清屏 printf(\对不起,您输入有误,请重新输入!\\n\ break; } if(ch2!='0') { if(ch2=='2'||ch2=='3'||ch2=='4'||ch2=='5'||ch2=='6'||ch2=='7'||ch2=='8') { printf(\排序完毕!\ printf(\按回车键继续!\ q=getchar(); if(q!='\\n') { getchar(); ch1='n'; } } } }

return 1;

- 4 -

图一 主界面

4.1.1 冒泡排序 核心思想

依次比较相邻的两个数,将小数放在前面,大数放在后面,第一轮比较后,最大的数便被放到了最后;第二轮操作前n-1个数据(假设有n个数据),依然是依次比较相邻的两个数,将小数放在前面,大数放在后面,倒数第二个数便是第二大的数;同理第i轮操作前n-i+1的数据(假设i取值是从1开始的),则n-i+i位置上的数据为第i大的数据。一共有n-1轮,第i轮比较中共比较n-i次比较。 核心代码

void Bubblesort() {

int i,j,k,x=0,y=0,m=0;

int exchange=TRUE;//标志位exchange初始化为TRUE 1 printf(\原始数据为(按回车键开始排序):\\n\\t\\t\ for(k=1;k<=L;k++) {

- 5 -

}

printf(\}

getchar(); printf(\

for(i=1;i

printf(\比较次数是:\\t\\t\printf(\

printf(\移动次数是:\\t\\t\printf(\

printf(\排序最终结果是:\\n\\t\\t\for(i=1;i<=L;i++)

{ printf(\}

- 6 -

图二 直接插入排序

4.1.2 快速排序 核心思想

首先检查数据列表中的数据数,如果小于两个,则直接退出程序。如果有超过两个以上的数据,就选择一个分割点将数据分成两个部分,小于分割点的数据放在一组,其余的放在另一组,然后分别对两组数据排序。 通常分割点的数据是随机选取的。这样无论你的数据是否已被排列过,你所分割成的两个字列表的大小是差不多的。而只要两个子列表的大小差不多 核心代码 //递归算法实现

void Quicksort(int low,int high) {

int i=low,j=high,k; R[0].key=R[low].key; while(i

- 7 -


数据结构课程设计-排序算法演示系统(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:财务管理综合练习题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: