几种排序算法,记录一下

个人也就会四种排序(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);
}

猜你喜欢

转载自blog.csdn.net/wWX336815/article/details/82773527