quick_sort.cc
2012-10-29 22:04
225 查看
//只是随手写写,非递归版的快排
#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; }
相关文章推荐
- python quick sort
- Algorithm: Quick Sort Mind and Related Questions
- Quick Sort In Haskell
- 算法导论(implementation of quick sort)
- Another C program for quick sort
- 排序——快速排序(quick_sort)
- 【COCOS2DX-LUA 脚本开发之八】不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- Algorithm: Quick Sort Mind and Related Questions
- C/C++ Quick Sort Algorithm
- 算法导论——快速排序(Quick-Sort)
- quick_sort
- Quick Sort & Binary Merge Sort
- quick sort analyse
- Insertion sort, select sort, Quick sort and Merge sort
- quick-sort
- 【quick-lua 002】 触摸捕获事件 cc.NODE_TOUCH_CAPTURE_EVENT
- C++、delphi、python Quick_Sort实现
- 【Data Structure】nlogn-SortMethods(Quick/Heap/Shell/Merge)
- C/C++ Quick Sort Algorithm
- poj 2388 Quick_sort 求中间值