交换排序之快速排序
来源:互联网 发布:php 删除cookie 编辑:程序博客网 时间:2024/05/01 10:51
上一篇文章讲述了交换排序的一种,冒泡排序http://blog.csdn.net/majianfei1023/article/details/7289177,现在讲一讲选择排序的另外一种算法,快速排序。
1.基本思想
假设要排序的数组是Array[0]……Array[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:
1)、设置两个变量i、j,排序开始的时候i = 0,j = n-1;
2)以第一个数组元素作为关键数据,赋值给_temp,即_temp = Array[i];
3)、从j开始向前搜索,即由后开始向前搜索(j=j-1),找到第一个小于_temp的值,两者交换;
4)、从i开始向后搜索,即由前开始向后搜索(i = i+1),找到第一个大于_temp的值,两者交换;
5)、重复第3、4步,直到i=j;
2.算法
1.一次划分算法具体如下:
int QuickSort(Type *Array, int low ,int high){//int m_i;//local variable to store the value of iType _tmp;int i = low;int j = high;_tmp = Array[i];while (i!=j){while((Array[j] > _tmp) && (j>i))j--;if (i<j){Array[i] = Array[j];i++;}while((Array[i] < _tmp) && (i<j))i++;if (i<j){Array[j] = Array[i];j--;}}Array[i] = _tmp;return i;}2.快速排序如下:
template<class Type>void QSort(Type *Array,int low ,int high){if (low < high){int temp = QuickSort(Array,low,high);QSort(Array,low,temp-1);QSort(Array,temp+1,high);}}算法分析
快速排序的记录移动次数不大于比较的次数,快速排序的最坏时间复杂度应为O(n*n),最好时间复杂度为O(nlogn);快速排序是一种不稳定的排序方法。
- 交换排序之----快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之快速排序
- 交换排序之--快速排序
- 排序算法--交换排序之快速排序
- 交换排序之--冒泡排序,快速排序
- 八大排序--交换排序 之 快速排序
- Linux下Oracle的安装
- 解决ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- android 使用XmlResourceParser 解析XML
- TinyOS Storage debug record
- Vector Clock
- 交换排序之快速排序
- Codeforces Round #108 (Div. 2)
- 第7题 倒置一个链表
- 使用IBM Rational Application Developer 8开发Portlet - 开发环境
- shell笔记--find命令
- shell笔记--正则表达式
- MyEclipse如何连接到SQLServer2005?
- 一个十位数由0-9数字组成并前N位被N整除
- Test