排序算法(六):快速排序
来源:互联网 发布:企鹅网络加速器 编辑:程序博客网 时间:2024/06/06 00:21
ps:虽然是转载的,但是代码是自己重新写过的。
基本思想:
1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
快速排序的示例:
(a)一趟排序的过程:
(b)排序的全过程
算法的实现:
#include <iostream>using namespace std;void Print(int a[], int low, int high){for (int i = low;i <= high;i++){cout << a[i] << " ";}cout << endl;}void Swap(int & p, int & q){int tmp = p;p = q;q = tmp;}void QuickSort(int a[], int low, int high){int lowT, highT;lowT = low;highT = high;int key = a[low];while (low < high){while (low < high && key < a[high])high--;Swap(a[low], a[high]);while (low < high && a[low] < key)low++;Swap(a[low], a[high]);}cout << "low=" << lowT << ",high=" << highT << endl;Print(a, lowT, highT);if (lowT < low - 1)QuickSort(a, lowT, low - 1);if (high < highT - 1)QuickSort(a, low + 1, highT);}int main(){int a[] = { 3,9,6,5,7,2,4,10,8,1 };QuickSort(a, 0, 9);cout << "result:" << endl;Print(a, 0, 9);system("pause");}
分析:
快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。但若初始序列按关键码有序或基本有序时,快排序反而蜕化为冒泡排序。为改进之,通常以“三者取中法”来选取基准记录,即将排序区间的两个端点与中点三个记录关键码居中的调整为支点记录。快速排序是一个不稳定的排序方法。
0 0
- 排序算法(六)快速排序
- 八大排序算法(六)快速排序
- 排序算法(六):快速排序
- 八大排序算法(六) 快速排序
- 排序算法(六):快速排序
- 排序算法(六)快速排序
- 排序算法六:快速排序
- 排序算法六 快速排序
- 排序算法(六):JAVA实现快速排序
- 排序算法(六)快速排序的优化
- 排序算法之六 快速排序
- 排序算法之六--快速排序
- (六)快速排序
- 排序六 快速排序
- 排序算法(六)
- 经典算法系列之六 快速排序 快速排序
- 排序算法之六 —— 快速排序算法
- 【数据结构与算法】排序算法之六:快速排序
- 作为一名设计师,我是如何在4个月的时间开发出一款app的
- UIViewAnimationOptions类型
- python unicode中文输出文件错误解决
- ios 常用字符串的操作
- solr全文查询基本实现
- 排序算法(六):快速排序
- iOS发送邮件
- 一个小公司老板的日常管理,希望能让创业的朋友学到东西(转)
- Spring3核心技术之事务管理机制
- java批处理数据接口
- 解决chrome默认打开ftp的问题
- iOS9 HTTP 不能正常使用的解决办法
- 终于搞定阿里云ftp的问题
- diyupload插件:批量图片上传