摘要: 思路:假设初始序列含有n个记录,可以看成n个有序的子序列,每个子序列的而长度为l,然后把每i(i>=2)个子序列归并,得到n/i个长度为i的有序子序列,再继续归并,如此重复直到得到一个长度为n的有序序列为止。这种排序方法称为i路归并排序。在内部排序中,通常是采用2路归并排序。程序代码: void Merge(Elem temp[],Elem R[],int low,int mid,int high) //将temp中的两个有序子序列归并到R中 { for(i = low,j = mid+1,k = low;i <= mid && j <= high;k++) 阅读全文
posted @ 2012-09-13 21:41 毛毛hhmm 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 程序代码: void HeapAdjust(Elem R[],int s,int m) { rc = R[s]; for(i = 2*s;i <= m; i++) //查找rc应插入的位置 { if((i < m && R[i]<R[i+1]) i++; //i为左右子树较大记录的下标 if(rc > R[i]) break; R[s] = R[i]; s = i; } R[s] = rc; } void HeapSort(Elem R[],int ... 阅读全文
posted @ 2012-09-13 20:59 毛毛hhmm 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 程序代码: void SelectSort(Elem R[],int n) { for(i = 1;i < n;i++) { //选择第i小的记录,并交换到位 min = R[i]; for(j = i;j <= n;j++) if(R[j] < min) min = R[j]; if(i != j) swap(s[i],s[j]); } }时间复杂度:比较次数(n-1)+(n-2)+---+1 = n(n-1)/2; 移动次数最小值为0,最大值为3(n-1)。稳定性:不稳定... 阅读全文
posted @ 2012-09-13 18:53 毛毛hhmm 阅读(150) 评论(0) 推荐(0) 编辑