- 简单选择排序
- 建立大根堆
- 将元素k为根的子树进行调整
- 堆排序
//选择类排序 #include<iostream> #include<stdlib.h> using namespace std; void SelectSort(int r[], int length) /*对记录数组r做简单选择排序,length为数组的长度*/ { int i,j,k; int n; int x; n=length; for(i=1;i<=n-1;++i) { k=i; for ( j=i+1 ; j<= n ; ++j) if (r[j] < r[k] ) k=j; if ( k!=i) { x= r[i]; r[i]= r[k]; r[k]=x; } } } void sift(int r[], int k, int m) /* 假设r[k..m]是以r[k]为根的完全二叉树,且分别以r[2k]和r[2k+1]为根的左、右子树为大根堆,调整r[k],使整个序列r[k..m]满足堆的性质 */ { int t; int i,j; int x; int finished; t= r[k]; /* 暂存"根"记录r[k] */ x=r[k]; i=k; j=2*i; finished=0; while( j<=m && !finished ) { if (j<m &&