快速排序

//
//  main.c
//  code_0
//
//  Created by tqh on 2017/6/26.
//  Copyright ? 2017年 tqh. All rights reserved.
//

#include <stdio.h>

int a[101],n;//定義全局變量,這兩個(gè)變量需要在子函數(shù)中使用

void quicksort(int left,int right){
    int i,j,t,temp;
    if(left > right){
        return;
    }
    temp = a[left]; //temp中存的就是基準(zhǔn)數(shù)
    i = left;       //默認(rèn)第一個(gè)吧
    j = right;      //第一次是最大數(shù)
    while (i != j) {
        
        //右邊的數(shù)大于基準(zhǔn)數(shù),下標(biāo)向左移動一位
        while(a[j] >= temp && i<j){
            j--;
        }
        //左邊小于基準(zhǔn)數(shù),下標(biāo)向右移動一位
        while(a[i] <= temp && i<j) {
            i++;
        }
        //不相同的時(shí)候?qū)⒒鶖?shù)左右的值換了
        if (i < j) {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    
    //將i位置的值給左邊的位置
    a[left] = a[i];
    
    //核心,i=j的時(shí)候,已經(jīng)找到基數(shù)的位置
    a[i] = temp;
    
    //繼續(xù)左邊的處理,遞歸
    quicksort(left,i-1);
    //繼續(xù)右邊的處理,遞歸
    quicksort(i+1,right);

}


int main(int argc, const char * argv[]) {
    
    //讀入數(shù)據(jù)
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    quicksort(1,n); //快速排序調(diào)用
    //輸出排序后的結(jié)果
    for(int i=1;i<=n;i++){
        printf("%d ",a[i]);
    }
    getchar();getchar();
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容