发布时间 : 星期日 文章数据结构课程设计排序算法演示系统更新完毕开始阅读f68c5d0ebb68a98271fefa70
R[j+gap].key=x; j=j-gap;
y++;//移动次数++
} else { j=0; } } }
gap=gap/2; m++;//比较次数++
//输出语句包括排序的结果及次数
printf(\第%d趟希尔排序的结果为:\\n\\t\\t\ for(k=1;k<=L;k++) {
printf(\ } getchar(); printf(\ }
printf(\比较次数是:\\t\\t\ printf(\
printf(\移动次数是:\\t\\t\ printf(\
printf(\排序最终结果是:\\n\\t\\t\ for(i=1;i<=L;i++) {
printf(\ }
12
printf(\}
4.1.5 直接选择排序 核心思想
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[2]交换,...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列. 核心代码
void Selectsort() {
int i,j,k,h,x=0,y=0;
printf(\原始数据为(按回车键开始排序):\\n\\t\\t\ for(k=1;k<=L;k++) {
printf(\ } getchar();
13
printf(\ for(i=1;i for(j=i+1;j<=L;j++) {x++; //比较次数 if(R[j].key h=j; //确定最小值 } } if(h!=i) { R[0].key=R[i].key; R[i].key=R[h].key; R[h].key=R[0].key; y++; //移动次数 } printf(\第%d趟选择排序的结果为:\\n\\t\\t\ for(k=1;k<=L;k++) { printf(\ } getchar(); printf(\ } //输出语句包括排序的结果及次数 printf(\比较次数:%d\ printf(\移动次数:%d\ printf(\排序最终结果是:\\n\\t\\t\ 14 for(i=1;i<=L;i++) { printf(\ } printf(\} 4.1.6 堆排序 核心思想 堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。将原始记录序列建成一个堆,成为初始堆,并输出堆顶元素;调整剩余的记录序列,使之成为一个新堆,再输出堆顶元素;如此反复进行,当堆中只有一个元素时,整个序列的排序结束,输出的序列便是原始序列的非递减有序序列。在堆排序的过程中,主要负责两方面的工作:一是如何将原始记录序列构造成一个堆,即建立初始堆;二是输出堆顶元素后,如何将剩余记录整理成一个新堆。 核心代码 //建堆 15