1. 程式人生 > >幾種排序演算法,記錄一下

幾種排序演算法,記錄一下

個人也就會四種排序(bubble,select,insert,quick),哈哈,看官大人可能有點失望。自己也看過幾種,不過一直沒寫過其他的,就記錄下這四種吧。

程式碼均可直接通過編譯。各種版本實現都有出入,不過思想都是一樣。工作這麼久還沒有一次性完全寫正確過,功力還是差點。

#include <iostream>
#include <algorithm>
using namespace std;
template <typename ITER>
void print(ITER begin,ITER end){
    while(begin != end){
        cout <<*begin << " ";
        begin++;
    }
    cout << endl;
}
void bubblesort(int data[],size_t size)
{
    for(size_t i = 0;i < size-1;++i){
        bool ordered = true;
        for(size_t j = 0;j < size-1-i;++j){
            if(data[j+1] <data[j]){
                swap(data[j+1],data[j]);
                ordered = false;
            }
            if(ordered)
                break;
        }
    }
}
void insertsort(int data[],size_t size){
    for(size_t i = 1;i < size;++i){
        int temp = data[i];
        size_t j;
        for(j = i;j > 0 && temp < data[j-1];--j)
            data[j] = data[j-1];
        if(j != i)
            data[j] = temp;
    }
}
void selectsort(int data[],size_t size){
    for(size_t i = 0;i < size -1;++i){
        size_t min = i;
        for(size_t j = i+1;j < size;++j)
            if(data[j] < data[min])
                min = j;
        if(min != i)
            swap(data[i],data[min]);
    }
}
void quicksort(int data[],size_t left,size_t right){
    size_t p = (left+right)/2;
    int pivot = data[p];
    for(size_t i = left,j = right;i < j;){
        while(!(i >= p || pivot < data[i]))
            ++i;
        if(i < p){
            data[p] = data[i];
            p = i;
        }
        while(!(j <= p || data[j] <pivot))
            --j;
        if(j > p){
            data[p] = data[j];
            p = j;
        }
    }
    data[p] = pivot;
    if(p-left > 1)
        quicksort(data,left,p-1);
    if(right-p > 1)
        quicksort(data,p+1,right);
    
}
int main()
{
    int array[] = {2,3,3,1,7,8,6,9,4,0};
    size_t size = sizeof(array)/sizeof(array[0]);
//    bubblesort(array,size);
//    selectsort(array,size);
//    insertsort(array,size);
    quicksort(array,0,size-1);
    print(array,array+size);
}