C++快速排序
2015-08-07 16:11
369 查看
快速排序的平均时间复杂度为O(nlog2n),空间复杂度为O(n)。快速排序是一种不稳定的排序方法,适用于待排序记录个数很大且原始记录随机排序的情况。尽管快速排序的最坏时间为O(n^2),但其平均性能是迄今为止所有内排序算法中最好的一个。快速排序应用广泛,典型的应用是UNIX系统调用库函数例程中qsort函数。
快速排序算法思想:
1.分解:在R[left....right]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间,并使左边子区间中所有记录的关键字小于等于基准记录的关键字,右边子区间中所有记录的关键字大于等于基准记录的关键字,而基准记录位于正确位置上。
2.求解:通过递归调用快速排序对左、右子区间进行快速排序。
3.组合:在求解步骤中的两个递归调用结束后,其左、右两个子区间已有序。
下面给出已经调试成功的代码。
运行结果为:
快速排序算法思想:
1.分解:在R[left....right]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间,并使左边子区间中所有记录的关键字小于等于基准记录的关键字,右边子区间中所有记录的关键字大于等于基准记录的关键字,而基准记录位于正确位置上。
2.求解:通过递归调用快速排序对左、右子区间进行快速排序。
3.组合:在求解步骤中的两个递归调用结束后,其左、右两个子区间已有序。
下面给出已经调试成功的代码。
#include<iostream> using namespace std; void QuickSort(int a[],int left,int right){ //快速排序算法 if(left<right){ int i=left; int j=right; int x=a[i]; while(i<j){ while(i<j&&a[j]>x) --j; //右子区间大于基准时,j向左移动指针 if(i<j){ a[i]=a[j]; //右子区间小于基准时,移动该记录到左子区间,并且i向右移动一位 i++; } while(i<j&&a[i]<x) ++i; if(i<j){ a[j]=a[i]; j--; } } a[i]=x; QuickSort(a,left,i-1); //递归调用快速排序算法 QuickSort(a,i+1,right); } } void main(){ int a[7]={23,13,49,6,31,19,28}; int i; cout<<"Before sort:"; for(i=0;i<7;i++) cout<<a[i]<<" "; cout<<endl; QuickSort(a,0,6); cout<<"After sort:"; for(i=0;i<7;i++) cout<<a[i]<<" "; cout<<endl; }
运行结果为:
相关文章推荐
- 第六篇:C++语言源程序中每一行加一个反斜杠的意思
- c++ 内存池
- C语言之文件操作03——最长最短行查找和统计
- c++内存池
- 【C++】链表
- Word 中插入 C/C++ 代码(转)
- 虚表(C++)virtual table
- 字符串的组合算法问题的C语言实现攻略
- c语言参数传递方式
- 《深入理解C++对象模型》读书笔记(二)
- C语言编程优化运行速度
- 浅谈C++中指针和引用的区别
- C++小结-编译原理
- C++的模板特化 和 STL中iterator_traits模板的偏特化
- C/C++中extern关键字详解
- 详解C++代码反汇编后的堆栈寄存器EBP和ESP
- C++的深拷贝与浅拷贝
- C++编译链接过程
- C++运算符重载
- C++异常以及错误处理