交换排序之快速排序

来源:互联网 发布: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);快速排序是一种不稳定的排序方法。

原创粉丝点击