quick_sort.cc

来源:互联网 发布:郑州seo刘文杰 编辑:程序博客网 时间:2024/05/01 10:23
//只是随手写写,非递归版的快排
#include <iostream>#include <stack>using namespace std;using std::stack;struct Node{int begin, end;};int partition(int *a, int begin, int end){int p = a[end];int pos = begin;for(int i = begin; i < end; i++){if(a[i] <= p){swap(a[i], a[pos]);pos++;}}swap(a[end], a[pos]);return pos;}void quick_sort(int *a, int begin, int end){if(end <= begin)return;int pivot = partition(a, begin, end);quick_sort(a, begin, pivot - 1);quick_sort(a, pivot + 1, end);}void quick_sort_not_recursive(int *a, int begin, int end){stack<Node> pos;Node node;int pivot;node.begin = begin;node.end = end;pos.push(node);while(!pos.empty()){Node tmp_node = pos.top();pos.pop();pivot = partition(a, tmp_node.begin, tmp_node.end);if(pivot -1 > tmp_node.begin){node.begin = tmp_node.begin;node.end = pivot - 1;pos.push(node);}if(pivot + 1 < tmp_node.end){node.begin = pivot + 1;node.end = tmp_node.end;pos.push(node);}}}int main(){int a[] = {1, 2, 3, 5, 10, 4, 6, 7, 7, 2};//int a[] = {1, 2, 7, 7, 2};int len = sizeof(a) / sizeof(a[0]);//quick_sort(a, 0, len - 1);for(int i = 0; i < len; i++){cout << a[i] << " ";}cout << endl;quick_sort_not_recursive(a, 0, len - 1);for(int i = 0; i < len; i++){cout << a[i] << " ";}cout << endl;return 0;}

原创粉丝点击