zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序

    基本思想

    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    算法复杂度

    最差时间复杂度(O(N^2))
    平均时间复杂度(O(NlogN))

    实现方法

    首先,我们有一串序列需要排序a[10] = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
    我们现在从序列里面找到一个基准数(任何数字都可以),这里选择a[0]也就是6。
    我们先从找到一个小于6的数,再从找到一个大于6的数,然后交换它们。
    这里可以用两个变量ij,分别指向序列的最左边和最右边,即i=6j=8
    可以尝试画图进行理解。

    #include <iostream>
    using namespace std;
    
    int n, a[101];
    
    void qsort(int left, int right) {
        if (left > right) return;
        int i = left, j = right, temp = a[left];
    	
        while (i != j) {
              while (a[j] >= temp && i < j) j--; // 当a[j]大于等于基准数,j向前走一位
              while (a[i] <= temp && i < j) i++; // 当a[i]小于等于基准数,i向后走一位
              if (i < j) swap(a[i], a[j]); // 当a[i]>a[j]时,交换这两个数
        }
    	
        swap(a[left], a[i]); // 交换基准数和a[i],a[i]是中间一个没有被交换的数
    	
        qsort(left, i - 1); // 继续排左边的
        qsort(i + 1, right); // 继续排右边的
    }
    
    int main() {
        cin >> n;
        for (int i = 0; i < n; i++) cin >> a[i];
    	
        qsort(0, n - 1); // 从0开始到n-1结束
    	
        for (int i = 0; i < n; i++) cout << a[i] << " ";
        return 0;
    }
    
  • 相关阅读:
    git log中文乱码问题
    局域网映射公网IP
    Android Studio 的一些配置
    Android Studio的安装
    adb的安装
    python的安装
    CentOS 7 上部署 java web 项目
    SQL——SQL语句总结(8)
    SQL——SQL语句总结(7)
    SQL——SQL语句总结(6)
  • 原文地址:https://www.cnblogs.com/luoling8192/p/12857492.html
Copyright © 2011-2022 走看看