WarMj:快速排序算法(Quick Soft)

參考資料:白話經典算法系列之六 快速排序 快速搞定

思維導圖
排序效果

代碼分析

#include<stdio.h>
#include<stdlib.h>

#define NUMBER 5

//targe[]:目標數組  retain:保留元素
void quick_sort(int target[], int left, int right){
    int i = left, j = right;
    int retain = target[left]; //將數組第一個元素提取出來。 

    if(i < j){
        while(i < j){
            //從右向左查找小于retain的元素并填入上一個坑。 
            while(i < j && target[j] >= retain){
                j--;
            }
            if(i < j){
                target[i++] = target[j];
            }

            //從左向右查找大于等于retain的元素并填入上一個坑。
            while(i < j && target[i] < retain){
                i++;
            }
            if(i < j){
                target[j--] = target[i];
            }
        }
        //退出循環時,i = j,將開始提取出的元素填入數組中。 
        target[i] = retain;
        
        //遞歸調用。 
        quick_sort(target, left, i - 1); //左側調整。 
        quick_sort(target, i + 1, right); //右側調整。   
    }
}

int main(){
    int vc[NUMBER];
    
    printf("Please enter %d numbers:\n", NUMBER);
    for(int i = 0; i < NUMBER; i++){
        printf("Number%d:", i + 1);
        scanf("%d", &vc[i]);
    }
    
    quick_sort(vc, 0, NUMBER - 1);
    
    printf("\n");
    for(int i = 0; i < NUMBER; i++){
        printf("%d  ", vc[i]);
    }
    printf("\n");
    
    system("pause");
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容