zoukankan      html  css  js  c++  java
  • 快速排序算法——C递归

    快速排序算法——C/C++

    三个函数
    基准插入函数:int getStandard(int array[],int low,int high)
    (返回基准位置下标)
    递归排序函数:void quickSort(int array[],int low,int high)
    主函数:int main()

    #include <stdio.h>
    #include <stdlib.h>
    
    int getStandard(int array[], int low, int high) {
        //基准数据 
        int key = array[low];
        while (low < high) {
            //因为默认基准是从左边开始,所以从右边开始比较 
            //当队尾的元素大于等于 基准数据 时,就一直向前挪动high指针 
            while (low < high && array[high] >= key) {
                high--;
            }
            //当找到比 array[low] 小的时,就把后面的值 array[high] 赋给它 
            if (low < high) {
                array[low] = array[high];
            }
    
            //当队首元素小于等于 基准数据 时,就一直向后挪动low指针 
            while (low < high && array[low] <= key) {
                low++;
            }
            //当找到比 array[high] 大的时,就把前面的值 array[low] 赋给它
            if (low < high) {
                array[high] = array[low];
            }
        }
        //跳出循环时low和high相等,此时的low或high就是key的正确索引位置
        //把基准数据赋给正确位置 
        array[low] = key;
    
        return low;
    }
    
    void quickSort(int array[], int low, int high) {
        //开始默认基准为    low=0
        if (low < high) {
            //分段位置下标 
            int standard = getStandard(array, low, high);
    
            //递归调用排序
            //左边排序 
            quickSort(array, low, standard - 1);
            //右边排序 
            quickSort(array, standard + 1, high);
        }
    }
    
    void display(int array[], int size) {
        for (int i = 0; i < size; i++) {
            printf("%d ", array[i]);
        }
        printf("
    ");
    }
    
    bool check(int array[], int size) {
        bool res = true;
        for (int i = 0; i < size - 1; i++) {
            if (array[i] > array[i + 1]) {
                res = false;
            }
        }
        return res;
    }
    
    int main() {
    //    int array[] = { 49,38,65,97,76,13,27,49,10 };
    //    int size = sizeof(array) / sizeof(int);
    //    printf("%d 
    ", size);
    //    quickSort(array, 0, size - 1);
    
        int size = 25;                            //数组大小 
        int array[25] = { 0 };                    //数组初始化 
        for (int i = 0; i < 100; i++) {            //100个数组测试 
            for (int j = 0; j < size; j++) {
                array[j] = rand() % 1000;        //随机生成数组 0~999
            }
            printf("原来的数组:");
            display(array, size);
            
            quickSort(array, 0, size - 1);
            
            printf("排序后数组:");
            display(array, size);
            
            if (check(array, size) == true) {
                printf("排序成功
    ");
            }
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/hongdoudou/p/13121439.html
Copyright © 2011-2022 走看看