堆排序的数组元素序号是从1开始的,因为堆实际上是一棵顺序存储(数组存储)的二叉排序树
简单选择排序
void SelectSort(SqList R[],int n) {
int i,j,k;
SqList tmp;
for(i=0; i<n-1; i++) {
k=i;
for(j=i+1; j<n; j++)
if(R[j].key<R[k].key)
k=j;
if(i!=k){
tmp=R[i];
R[i]=R[k];
R[k]=tmp;
}
}
}
堆排序
void Sift(SqList R[],int low,int high){
int i=low,j=2*i;
SqList tmp=R[i];
while(j<=high){
if(j<high && R[j].key<R[j+1].key)
j++;
if(tmp.key<R[j].key){
R[i]=R[j];
i=j;
j=2*i;
}
else break;
}
R[i]=tmp;
}
void HeapSort(SqList R[],int n){
int i;
SqList tmp;
for(i=n/2;i>=1;i--)
Sift(R,i,n);
for(i=n;i>=2;i--){
tmp=R[1];
R[1]=R[i];
R[i]=tmp;
Sift(R,1,i-1);
}
}
暂无评论