zoukankan      html  css  js  c++  java
  • 新手讲算法 快速排序

    (1)选择一个数字 pivot,将数组分成两个数组 a,b。 a <= pivot, b  > pivot 

    (2)不停地递归,直到每个数组中只有一个数字,此时数组达到有序

        疑问:怎么选择 基准:pivot

        (1)固定位置:开头 或 中间 或 结尾

        (2)随机位置

        (3)开头 + 中间 + 结尾 数字的平均值

      一般为了均衡:我们都选第三种进行:

    #include<iostream>
    #include <algorithm>
    using namespace std;
    
    void swap(int *a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    
    void quickSort(int *a, int start, int end) {
        if(start >= end) {
            return;
        }
        int mid = (start + end) / 2;
        int provit = (a[start] + a[end] + a[mid]) / 3;
        int i = start, j = end;
        while(i < j) {
            while(i < j && a[j] > provit) j--;
            while(i < j && a[i] < provit) i++;
            if(i < j) {
                swap(a, i, j);
                j--;
                i++;
            }
        }
        
        quickSort(a, start, j);
        quickSort(a, j + 1, end);
    }
    
    int main(){
        int N;
        cin>> N;
        int *a;
        a = new int[N];
        for(int i = 0; i < N; i++) {
            cin>>a[i];
        }
        
        quickSort(a, 0, N - 1);
        
        for(int i = 0; i < N; i++) {
            cout<<a[i]<<' ';
        }
        
        return 0;
    }
    

      

  • 相关阅读:
    MongoDB慢查询性能分析
    redis的LRU算法(二)
    Skynet服务热点火焰图分析
    内存爆灯
    时区问题
    与机器共生
    bug狩猎
    Lesson Learned
    下划线引起的血案
    Intel的CPU漏洞:Spectre
  • 原文地址:https://www.cnblogs.com/jijiji/p/8687108.html
Copyright © 2011-2022 走看看