zoukankan      html  css  js  c++  java
  • 排序算法积累(3)-----快速排序

    一. 快速排序思路

      1. 快速排序首先在所需要排序的数据中随机地选出一个数作为阀值,并把这个数(也就是这个阀值)与原来数据中最后的一个数交换,到了这步,数据中最后的一个数就是这个阀值了。

      2. 然后从头开始,将数据一个一个地与这个阀值作比较,小于这个阀值的数,放在左边,等于这个阀值的数不用理,大于这个阀值的数放在右边,这样就可以将数据分成小于等于大于三个

          区间了。注意每个区间里的数据是乱序的。

      3. 最后从复步骤2(也就是递归)。

    二. 程序

    #include <iostream> 
    #include <cstdio>
    #include <cstdlib>    
    #include <time.h>  
    #include <algorithm>
    
    using namespace std;
    void swap(int arr[], int i, int j) {           //交换函数
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    
    int* partition(int arr[], int l, int r) {       //划分区间函数
        int less = l - 1;
        int more = r;
        while (l < more) {
            if (arr[l] < arr[r]) {      //小于阀值的区间
                swap(arr, ++less, l++);
            }
            else if (arr[l] > arr[r]) {         //大于阀值的区间
                swap(arr, --more, l);
            }
            else {             //等于阀值的区间
                l++;
            }
        }
        swap(arr, more, r);
        return new int[]{less + 1, more};
    }
    
    void quickSort(int arr[], int l, int r) {        //快速排序函数
        if (l < r) {
            swap(arr, l + (int)(rand() / double(RAND_MAX) * (r - l + 1)), r);
            int *p = partition(arr, l, r);
            quickSort(arr, l, p[0] - 1);    //递归调用
            quickSort(arr, p[1] + 1, r);     //递归调用
        }
    }
    
    
    
    int main(){
        int arr1[6] = { 6, 2, 3, 5, 3,9};
        srand((unsigned)time(0));
        quickSort(arr1, 0, 5); //排序,PS:范围是0到数组长度减一
        for (int i = 0; i < 6; i++)
        {
            cout << arr1[i] << ' ';
        }
        cout << endl;
        return 0;
    }

     

  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/panlangen/p/7879114.html
Copyright © 2011-2022 走看看