zoukankan      html  css  js  c++  java
  • 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('
    ');
    }

    运行结果

  • 相关阅读:
    Promise推荐
    ES6推荐
    vue学习笔记之项目创建流程
    vue学习笔记之环境搭建
    前端知识小总结3
    前端知识小总结2
    JavaScript语言精粹の笔记
    JavaScript修炼之道の笔记
    移动端及vue相关问题
    组件式开发Web App
  • 原文地址:https://www.cnblogs.com/learning-c/p/5212716.html
Copyright © 2011-2022 走看看