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

参考资料:白话经典算法系列之六 快速排序 快速搞定

WarMj:快速排序算法(Quick Soft)_第1张图片
思维导图
WarMj:快速排序算法(Quick Soft)_第2张图片
排序效果

代码分析

#include
#include

#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;
}

你可能感兴趣的:(WarMj:快速排序算法(Quick Soft))