快速排序
来源:互联网 发布:人工智能革命即将到来 编辑:程序博客网 时间:2024/05/24 15:37
快速排序的基本思路是:首先我们选择一个中间值middle(程序中我们可使用数组中间值),把比中间值小的放在其左边,比中间值大的放在其右边。由于这个排序算法较复杂,我们先给出其进行一次排序的程序框架(从各类数据结构教材中可得):
void QuickSort(int *pData, int left, int right)
{
int i, j;
int middle, iTemp;
i = left;
j = right;
middle = pData[(left + right) / 2]; //求中间值
do
{
while ((pData[i] < middle) && (i < right)) //从左扫描大于中值的数
i++;
while ((pData[j] > middle) && (j > left)) //从右扫描小于中值的数
j--;
if (i <= j) //找到了一对值
{
//交换
iTemp = pData[i];
pData[i] = pData[j];
pData[j] = iTemp;
i++;
j--;
}
} while (i <= j) ; //如果两边扫描的下标交错,就停止(完成一次)
//当左边部分有值(left<j),递归左半边
if(left<j)
QuickSort (pData,left,j);
//当右边部分有值(right>i),递归右半边
if(right>i)
QuickSort (pData,i,right);
}
对于n个成员,快速排序法的比较次数大约为n*logn 次,交换次数大约为(n*logn)/6次。如果n为100,冒泡法需要进行4950 次比较,而快速排序法仅需要200 次,快速排序法的效率的确很高。快速排序法的性能与中间值的选定关系密切,如果每一次选择的中间值都是最大值(或最小值),该算法的速度就会大大下降。快速排序算法最坏情况下的时间复杂度为O(n2),而平均时间复杂度为O(n*logn)。
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- vs2003属性窗口空白的问题
- CImageList用法介绍
- C# 字符串操作
- A*寻路 曼哈顿启发式算法 初探 经典寻路算法
- 招一个合适的产品经理果真容易吗
- 快速排序
- 云计算技术汇总
- Learning low-level vision学习低层次视觉1999
- 安装IIS合集
- Struts2输入校验(三) のaddActionError的用法
- 修复Ubuntu Grub的方法
- android飞行模式灰显不能操作问题分解
- WSGI.应答可迭代对象
- C语言中union与struct的区别及sizeof的计算方式