博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高速排序 与 随机高速排序 算法分析
阅读量:6991 次
发布时间:2019-06-27

本文共 1103 字,大约阅读时间需要 3 分钟。

高速排序是由东尼·霍尔所发展的一种排序算法。

在平均状况下,排序 n 个项目要Ο(n log n)次比較。在最坏状况下则须要Ο(n2)次比較,但这样的状况并不常见。其实,高速排序通常明显比其它Ο(n log n) 算法更快,由于它的内部循环(inner loop)能够在大部分的架构上非常有效率地被实现出来。

高速排序的长处:

(1)原址排序。空间复杂度较小。

(2)尽管最坏情况下(有序数组)时间复杂度为 (n*n),可是平均性能非常好,期望复杂度为( nlg(n) )。

高速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)

步骤为:
(1)从数列中挑出一个元素,称为 "基准"(pivot),
(2)又一次排序数列,全部元素比基准值小的摆放在基准前面,全部元素比基准值大的摆在基准的后面(同样的数能够到任一边)。

在这个分区退出之后。该基准就处于数列的   中间位置。这个称为分区(partition)操作。

(3)递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

高速排序 与 随机高速排序的唯一差别就是:高速排序始终将数组最后一个元素作为基准。而随机高速排序是从数组中随机挑选一个元素和最后一个元素交换位置后。作为基准。随机高速排序基准的选择更能适应大规模随机数据的高速排序。

(随机高速排序算法)

高速排序源代码:

#include 
#include
#include
using namespace std;class quick_sort_class{ public: quick_sort_class(int *a, int n):p_array(a), n_array(n){}; ~quick_sort_class(); void quick_sort(int i, int j); void print(); protected: int partition(int *a, int p, int r); private: int *p_array; int n_array;};quick_sort_class::~quick_sort_class(){}int quick_sort_class::partition(int *a, int p, int r){ int x = a[r]; int i = p-1; for(int j=p;j
測试结果:

你可能感兴趣的文章
51单片机点亮双向流水灯
查看>>
字符串前面+r
查看>>
Classic Binary Search
查看>>
Ubuntu 查看文件以及磁盘空间大小管理
查看>>
ExtJS与jQuery的一点细节上的对比
查看>>
Struts2源码浅析-初始化
查看>>
nginx安装
查看>>
angularjs 利用filter进行表单查询及分页查询
查看>>
stack
查看>>
修改已经释放了的请求号
查看>>
重写和强制转换再调用能编译但不能运行
查看>>
logging ,re 模块
查看>>
Android入门之GridView(表格控件)
查看>>
JavaScript基础篇
查看>>
Cesium 加载天地图
查看>>
ASP.NET MVC 主要的四种过滤器和三种具体实现类
查看>>
Python中的正则表达式
查看>>
Memcached 客户端使用
查看>>
【193】◀▶ PowerShell 官方资料索引
查看>>
linux 学习
查看>>