排序算法

Posted gdut-gordon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法相关的知识,希望对你有一定的参考价值。

 

快速排序

平均时间复杂度O(nlogn);

最好情况时间复杂度O(nlogn),pivotkey基本处于顺序表中间;

最坏情况时间复杂度O(n),顺序表处于正序和倒序;

 

最好情况空间复杂度O(logn),要执行logn次递归调用;

最坏情况空间复杂度O(n),要执行n-1次递归调用;

#include <iostream>
#include <vector>

using namespace std;

typedef struct 
    vector<int> r = 0;
    int length;
 SqList;

void swap(SqList * L, int i, int j) 
    int temp = L->r[i];
    L->r[i] = L->r[j];
    L->r[j] = temp;


int getPivot(SqList *L, int low, int high) 
    int pivot = L->r[low];
   
    while(low < high) 
        while(low < high && pivot <= L->r[high]) 
            high --;
        
        swap (L, low, high);
        
        while(low < high && pivot > L->r[low]) 
            low ++;
        
        swap (L, low, high);        
    
    return low;


void QSort(SqList *L, int low, int high)     
    if(low < high) 
        int pivot = getPivot(L, low, high);
        QSort(L, low, pivot-1);
        QSort(L, pivot+1, high);
    


void QuickSort (SqList *L) 
    QSort(L, 1, L->length-1);


int main (int argc, char** argv) 
    SqList *sl = new SqList;
    
    int num = 0, temp = 0;
    
    cout << "cin the number of sqlist(include flag)" << endl;
    cin >> num;
    sl->length = num;
    
    for(int i = 0; i < num-1; ++i) 
        cin >> temp;
        sl->r.push_back(temp);
    

    QuickSort(sl);
    
    for(int i = 0; i < num; ++i)
        cout << sl->r[i] << endl;
    
    return 0;

 

以上是关于排序算法的主要内容,如果未能解决你的问题,请参考以下文章

排序算法概述

十大经典排序算法总结(归并排序)

十大经典排序算法总结(桶排序)

十大经典排序算法总结(希尔排序)

十大经典排序算法总结(快速排序)

十大经典排序算法总结(冒泡排序)