c++实现各种排序算法.md

1.插入排序 时间复杂度O(n^2)

#include <iostream>
#include <vector>
using namespace std;
void insertionSort(vector<int> &vec) {
    for (auto i = vec.begin(); i < vec.end(); i++) {
        auto j = vec.begin();
        //find the position to insert
        for (; j < i; j++) {
            if(*i >= *j)
                continue;
            break;
        }
        //insert
        for(auto k = j; k<i;k++){
            auto temp = *k;
            *k = *i;
            *i = temp;
        }
    }
}

2.冒泡排序 时间复杂度O(n^2)

void bubbleSort(vector<int> &vec) {
    for (auto i = vec.begin(); i < vec.end(); i++) {
        for (auto j = i; j < vec.end(); j++) {
            if (*j < *i) {
                int temp = *j;
                *j = *i;
                *i = temp;
            }
        }
    }
}

3.快速排序 时间复杂度O(nlgn)

void quickSort(vector<int> &vec, int start, int stop){
    if(start < stop){
        int pivot = vec[start], low = start, high = stop;
        while(low < high){
            while(low < high && vec[high] >= pivot)
                high --;
            vec[low]  = vec[high];
            while(low < high && vec[low] <= pivot)
                low ++;
            vec[high] = vec[low];
        }
        vec[high] = pivot;
        quickSort(vec, start, low-1);
        quickSort(vec, low+1, stop);
    }
}

4.选择排序 时间复杂度O(n^2)

void selectionSort(vector<int> &vec){
    for(auto i = vec.begin(); i< vec.end();i++){
        auto k = i;
        for(auto j = i; j< vec.end();j++){
            if(*j < *k)
                k = j;
        }
        int temp = *k;
        *k = *i;
        *i = temp;
    }
}