快速排序法的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左边和右边的序列即可
快速排序算法的优化主要可以从轴值的选取和递归着手,其中递归可以通过以下方式优化:
对于快速排序算法,每次递归均会开辟一块空间,因此当序列长度较小时,可以不再排序,最后将序列用插入排序法排列一次即可
快速排序法的最坏时间代价为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优化的快速排序算法:
快速排序算法的优化主要可以从轴值的选取和递归着手,其中递归可以通过以下方式优化:
对于快速排序算法,每次递归均会开辟一块空间,因此当序列长度较小时,可以不再排序,最后将序列用插入排序法排列一次即可
- 快速排序的c实现
- 快速排序的c实现
- 快速排序c实现
- 快速排序C实现
- 快速排序C实现
- 快速排序C实现
- 快速排序(C实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 快速排序的C语言代码实现
- 快速排序的实现-C语言
- 快速排序算法的c语言实现
- 快速排序算法的C/C++ 实现
- 快速排序的C语言实现
- 快速排序的C语言实现
- 快速排序算法的C语言实现
- 【算法】C语言实现的快速排序
- 楼市近期回暖
- Eclipse+YAGARTO+JLINK实现Windows下STM32的编译和调试
- 深入理解incarnation
- A wrapper for maven to run with specific JAVA_HOME
- C# “Sources”参数中指定了多次的错误解决方案
- 快速排序法的C++实现
- page和pageContext的区别
- oracle创建数据库
- 解决office稿纸加载项,打开word老弹出窗口的问题:
- c语言中的static用法
- 第一篇文字
- IE8“开发人员工具”使用详解上(各级菜单详解)
- WIN7的操作系统,中行的网银无法登陆,总是显示INTERNET EXPLORER停止工作是怎么回事啊?
- Eclipse+JLink GDB Sever在mini2440开发板leds点灯程序调试过程