快速排序递归算法
2016-03-11 16:06
756 查看
#include<iostream> using namespace std; void Swap(int* x, int *y) { int tmp = *x; *x = *y; *y = tmp; } int Median(int* a, int left, int right) { int center = (left + right) / 2; if (a[left] > a[center]) Swap(&a[left], &a[center]); if (a[left] > a[right]) Swap(&a[left], &a[right]); if (a[center] > a[right]) Swap(&a[center], &a[right]); Swap(&a[center], &a[right - 1]); return a[right-1]; } int Partition(int *a, int length, int left, int right) { if (a == NULL || length < 0 || left<0 || right>length) throw new exception("Invaild data"); int pivot=Median(a, left, right); int l = left; int r = right - 1; while (l < r) { while (a[++l] < pivot); while (a[--r] > pivot); if (l < r) Swap(&a[l], &a[r]); else break; } Swap(&a[l], &a[right - 1]); return l; } void QuickSort(int *a, int length, int left,int right) { if (left == right) return; int index = Partition(a, length, left, right); if (index > left) QuickSort(a, length, left, index - 1); if (index < right) QuickSort(a, length, index + 1, right); } int main() { int a[] = { 1, 5, 6, 8, 6, 6, 2, 0, 3, 6, 9, 2, 4, 7 ,10}; QuickSort(a, 15, 0, 14); for (int i = 0; i < 15; i++) cout << a[i] << " "; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性