数据结构与算法——排序(C++)

九大排序算法

在之前的向量、列表、散列表与优先级序列中,已经学习了前七种排序方法。在本博客中将学习剩余的快速排序与希尔排序。
起泡排序
归并排序
插入排序
选择排序
桶排序
基数排序
堆排序
快速排序
希尔排序

快速排序

快速排序重点——轴点构造

快速排序程序

/*
 * test program on quickSort
 * author@Ripples
 * 20200807
 */
#include 
#include 
// #include "quick_sort.h"
using namespace std;

//swap函数
void swap( int a, int b){
    auto tmp = a;
    a = b;
    b = a;
}

//partition函数,构造轴点
int partition( int* A, int lo, int hi ){
    swap( A[lo], A[ lo + rand()%( hi - lo + 1 )]);
    int pivot = A[lo];
    while( lo < hi ){
        while( lo < hi )
            if( pivot < A[hi])
                hi--;
            else
                { A[lo++] = A[hi]; break;}
        while( lo < hi )
            if( A[lo] < pivot )
                lo++;
            else
            { A[hi--] = A[lo]; break;} 
    }
    A[lo] = pivot;
    return lo;     

}

//快速排序
void quickSort( int* A, int lo, int hi ){
    if( hi - lo < 2 ) return;
    int mi = partition( A, lo, hi - 1 );
    quickSort( A, lo, mi );
    quickSort( A, mi + 1, hi );
}

int main(){
    int vec[6] = { 2, 5, 9, 3, 1, 0};
    quickSort( vec, 0, 6 );
    for( int i = 0; i < 6; ++i ){
        cout << vec[i] << endl;
    }
}

希尔排序

希尔排序是将向量划分为希尔序列值长度的片段,依次进行排序的过程。

希尔序列的选择对于希尔排序的性能有着重要的作用。常见的序列有Shell序列、Papernov-Stasevic序列、Pratt序列和Sedgewick序列。其中,Sedgewick序列的综合效率最好。

你可能感兴趣的:(数据结构及实现,数据结构,c++,排序算法,快速排序)