堆排序的数组元素序号是从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);
    }
}