⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quicksort.cpp

📁 一个quicksort的算法 有关数据结构的
💻 CPP
字号:
#include <iostream>
#include <cstdlib>
#include <vector>

using namespace std;

/*!Begin Snippet*/
template <class T>
void quick_sort(vector<T>& v, int low, int high) {

    // Do not solve recursively when faced with
    // only 1 or 2 elements
    if (low == high) {
        return ;
    }
    else if (low + 1 == high) {
        if (v[low] > v[high]) {
            swap(v[low], v[high]);
            return ;
        }
    }

    // select pivot
    int middle = (low + high) / 2;
    T pivot = v[middle];
    swap(v[middle], v[high]);

    // partition
    int i;
    int j;
    for (i = low, j = high - 1; ;) {

        while (v[i] < pivot && i < j) i++;
        while (pivot < v[j] && i < j) j--;

        if (i < j) {
            swap(v[i], v[j]);
        }
        else {
            break;
        }
    }

    // place pivot in correct location
    if (i != high - 1 && j != high - 1) {
        swap( v[i], v[high]);
    }

    // quicksort sub-vectors
    if (i == low && j == low) {
        quick_sort(v, low + 1, high);
    }
    else if (i == high - 1 && j == high - 1) {
        quick_sort(v, low, high - 1);
    }
    else {
        quick_sort(v, low, i - 1);
        quick_sort(v, i + 1, high);
    }

}
/*!End Snippet*/


int main(int argc, char* argv[]) {

    vector<int> v;
    v.push_back(3);
    v.push_back(1);
    v.push_back(43);
    v.push_back(33);
    v.push_back(23);
    v.push_back(74);
    v.push_back(11);
    v.push_back(53);
    v.push_back(22);
    v.push_back(64);

    quick_sort(v, 0, v.size() - 1);

    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++) {
        cout << *it << endl;
    }

    return EXIT_SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -