QuickSort 递归 分治

QuickSort 

参考《算法导论》,《C程序设计语言》

#include<stdio.h>
void swap(int v[], int i, int j);
void view(int v[]);
//主元为A[r]
//partition后,A[p..i]<=A[r]
//A[i+1]=A[r]
//A[i+2..r]>A[r]
int partition(int A[], int p, int r) {
    int x = A[r];
    int i=p-1;
    for(int j=p;j<r;j++){
        if(A[j]<=x){
            i++;
            swap(A,i,j);
        }
    }
    swap(A,i+1,j);
    return i+1;
};
//以递增顺序对v[p..r]进行排序
void quicksort(int A[], int p, int r) { 
    if(p<r) { 
        printf("partition A[%d] to A[%d]
", p,r);
        int q = partition(A,p,r);
        view(A);
        printf("q=%d
",q);
        printf("quicksort A[%d] to A[%d]
", p,q-1);
        quicksort(A,p,q-1);
        printf("quicksort A[%d] to A[%d]
", q+1,r);
        quicksort(A,q+1,r);
    }    
}
int main() {
    int A[]={2,1,7,8,3,5,6,4};
    view(A);
    quicksort(A,0,7);
    view(A);
    getchar(); getchar();
    return 0;    
}
void swap(int A[], int i, int j) {
    int temp;
    
    temp=A[i];
    A[i]=A[j];
    A[j]=temp;
}
void view(int A[]){//显示A数组当前状态
    for(int i=0;i<8;i++){
        putchar(A[i]+'0');
        putchar(' ');
    }
        putchar('
');
}

运行结果

原文地址:https://www.cnblogs.com/learning-c/p/5212716.html