快速排序
来源:互联网 发布:淘宝质检报告是真的吗 编辑:程序博客网 时间:2024/05/01 04:47
最近比较有空,想熟悉一下算法,有一段时间没有写程序了。
基本思想:
在当前无序区Array[1..H]中任取一个数据元素(这里用中间的元素)作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:Array[1..I-1]和Array[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即Array[1..I-1]≤X.Key≤Array[I+1..H](1≤I≤H),当Array[1..I-1]和Array[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。
快速排序实现代码:
template<class T>
void quickSort(T Array[], int nSize)
...{
run(Array, 0, nSize-1);
}
template<class T>
void run(T Array[], int nleft, int nright)
...{
int i = nleft, j = nright;
int mid = (nleft + nright)/2;
T x = Array[mid];
do ...{
while((i < nright) && (Array[i] < x)) i++; //从左到右查找第1个大于等于x的下标
while((j > nleft ) && (Array[j] > x)) j--; //从右到左查找第1个小于等于x的下标
if(i <= j)
...{
swap(Array[i], Array[j]);
i++;
j--;
}
} while(i <= j);
if(j > nleft) //sort Array[nleft...j];
run(Array, nleft, j);
if(i < nright) //sort Array[i...nright];
run(Array, i, nright);
}
void quickSort(T Array[], int nSize)
...{
run(Array, 0, nSize-1);
}
template<class T>
void run(T Array[], int nleft, int nright)
...{
int i = nleft, j = nright;
int mid = (nleft + nright)/2;
T x = Array[mid];
do ...{
while((i < nright) && (Array[i] < x)) i++; //从左到右查找第1个大于等于x的下标
while((j > nleft ) && (Array[j] > x)) j--; //从右到左查找第1个小于等于x的下标
if(i <= j)
...{
swap(Array[i], Array[j]);
i++;
j--;
}
} while(i <= j);
if(j > nleft) //sort Array[nleft...j];
run(Array, nleft, j);
if(i < nright) //sort Array[i...nright];
run(Array, i, nright);
}
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 20年来比尔·盖茨的智慧语录摘选
- VC之美化界面篇
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- 我整理的10条人生信念
- 让NetBeans速度变快的技巧
- 快速排序
- MFC—BeginPath
- 现在想要在重庆招程序员真的这么难吗?
- 想自己开始写篇论文了!
- RCP中Perspective中,设置各个view的大小比例
- 多版本pku题目分类及算法分类
- java求复数四则运算
- string的类型转换
- 日本語のあいさつ