• 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('
    ');
    }

    运行结果

  • 相关阅读:
    myeclipse的git插件安装
    安装虚拟机和Linux系统
    Windows 10快速在指定目录打开命令行
    更新Maven的本地库
    Maven安装
    html全屏显示
    除法保留两位小数
    springmvcjson中文乱码处理
    office2016 下载直通车
    JAVA面向对象编程深入理解图
  • 原文地址:https://www.cnblogs.com/learning-c/p/5212716.html
Copyright © 2020-2023  润新知