快速排序法的C++实现

来源:互联网 发布:辽宁石油化工大学 知乎 编辑:程序博客网 时间:2024/05/21 05:56
快速排序法:
快速排序法的最坏时间代价为O(n2),最坏空间代价为O(n);
最优和平均时间代价为O(nlogn),空间代价为O(logn);
快速排序法采用分治的思想,取定一个轴值,此处取中间值,然后将该值放于临时变量temp中,然后将最右边的值放于中间位置处,此时,最右边的位置便空闲出来索引为jIndex,最左边的索引为iIndex初始为0
然后就从左边iIndex处开始向右找大于temp的数,每次iIndex自加1,当找到时,将其值放于jIndex处,然后jIndex--,从jIndex开始从右往左找小于temp的数,当iIndex与jIndex相等时,在iIndex处放置temp值,此时temp值左边的值均小于temp,temp值右边的值均大于temp,然后递归排序temp左边和右边的序列即可
#ifndef RAPIDSORT_H#define RAPIDSORT_H#include <iostream>using namespace std;template<typename T>class RapidSort{public: void rapidSort( T*,int ); void printArr( T*,int );};/** * 递归实现快速排序法 */template<typename T> void RapidSort<T>::rapidSort( T *sortedArr,int arrLength ){ if( arrLength==1 || arrLength==0 )  return; int lIndex=0,rIndex=arrLength-1; int middle=( lIndex+rIndex )/2; int temp=sortedArr[middle]; sortedArr[middle]=sortedArr[rIndex]; bool ltor=true; while( lIndex!=rIndex ) {  if( ltor )  {   if( sortedArr[lIndex]>temp )   {    sortedArr[rIndex--]=sortedArr[lIndex];    ltor=false;   }   else    ++lIndex;  }else{   if( sortedArr[rIndex]<temp )   {    sortedArr[lIndex++]=sortedArr[rIndex];    ltor=true;   }   else    --rIndex;  }   } sortedArr[lIndex]=temp; // 排序左半部分 rapidSort( &sortedArr[0],lIndex+1 ); // 排序右半部分 rapidSort( &sortedArr[lIndex+1],arrLength-lIndex-1 );}template<typename T> void RapidSort<T>::printArr( T *sortedArr,int arrLength ){ for( int i=0;i<arrLength;++i ) {  cout<<sortedArr[i]<<"   "; }}#endif
优化的快速排序算法:
快速排序算法的优化主要可以从轴值的选取和递归着手,其中递归可以通过以下方式优化:
对于快速排序算法,每次递归均会开辟一块空间,因此当序列长度较小时,可以不再排序,最后将序列用插入排序法排列一次即可
 
原创粉丝点击