注意:快速排序的第二次扫描R[i].key <= tmp.key,而不是R[i].key < tmp.key,不然可能陷入i!=j永远不成立的循环

冒泡排序

void BubbleSort(SqList R[],int n) {
    int i,j,exchange;
    SqList tmp;
    for(i=0; i<n-1; i++) {
        exchange=0;
        for(j=n-1; j>i; j--)
            if(R[j].key<R[j-1].key) {
                tmp=R[j];
                R[j]=R[j-1];
                R[j-1]=tmp;
                exchange=1;
            }
            if(exchange==0)
                return;
        }
    }

快速排序

void QuickSort(SqList R[],int s,int t) {
    int i=s,j=t;
    SqList tmp;
    if(s<t) {
        tmp=R[s];
        while(i!=j) {
            while(j>i && R[j].key>tmp.key)
                j--;
            R[i]=R[j];
            while(i<j && R[i].key<=tmp.key)
                i++;
            R[j]=R[i];
        }
        R[i]=tmp;
        QuickSort(R,s,i-1);
        QuickSort(R,i+1,t);
    }
}