快速排序法的C++实现

快速排序法:
快速排序法的最坏时间代价为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
优化的快速排序算法:
快速排序算法的优化主要可以从轴值的选取和递归着手,其中递归可以通过以下方式优化:
对于快速排序算法,每次递归均会开辟一块空间,因此当序列长度较小时,可以不再排序,最后将序列用插入排序法排列一次即可
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值