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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容