排序算法之快速排序

一、原理

核心原理就是划分,找一个哨兵元素(通常选第一个元素),然后根据哨兵元素将原序列所有比哨兵元素大的放哨兵后面,所有比哨兵小的放哨兵前面(升序排列,降序相反即可),那么,哨兵元素此时所在的位置就应该是排序之后它应该在的位置,也就是说哨兵的位置已经正确找到,只是他前后的序列可能还是无需的,对于前后序列用同样的方法,就能将所有元素的正确位置找到,实现序列排序。

二、算法复杂度

时间复杂度:最坏:O(n²)最好:O(nlogn)平均:O(nlogn)

空间复杂度:O(logn

三、C/C++源码实现

#include<iostream>

using namespace std;

void KP(int data[],int begin,int end){
    int left=begin;
    int right = end;
    int row = data[begin];
    while(left<right){
        while(data[right]>=row&&left<right)
        right--;
        data[left]=data[right];
        while(data[left]<=row&&left<right)
        left++;
        data[right]=data[left];
    }
    data[left]=row;
    if(begin<end){
    KP(data,begin,left-1);
    KP(data,right+1,end);
    }
}

int main(){
    int data[10];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    cin>>data[i];
    KP(data,0,n-1);
    for(int i=0;i<n;i++)
    cout<<data[i]<<" ";
    
}
View Code

 四、Golang源码

func KpSort(data []int,left int ,right int )  {
    if left >=right {
        return
    }
    row := data[left]
    begin := left
    end := right
    for begin < end{ 
        for data[end] >= row && begin<end{
            end --
        }
        fmt.Println(end)
        data[begin] = data[end]
        for data[begin] <= row && begin<end{
            begin++
        }
        fmt.Println(begin)
        data[end] = data[begin]
    }
    data[begin] = row
    KpSort(data,left,begin-1)
    KpSort(data,end+1,right)
}
View Code

 

posted @ 2019-09-15 11:13  hugeQAQ  阅读(232)  评论(0)    收藏  举报