博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种排序算法比较
阅读量:6759 次
发布时间:2019-06-26

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

稳定:冒泡排序、插入排序、归并排序和基数排序
不稳定:选择排序、快速排序、希尔排序、堆排序
  • 插入排序:一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
      1. 从第一个元素开始,该元素可以认为已经被排序
      2. 取出下一个元素,在已经排序的元素序列中从后向前扫描(可用二分查找,二分查找适用于已排序的数列)
      3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
      4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
      5. 将新元素插入到下一位置中
      6. 重复步骤2
  • 希尔排序:
  • 冒泡排序:第一趟,从最后的n-1个数开始,与前面一个数两两比较,直到把最小一个数放到第一位。第二趟,也是从最后的n-1个数开始,与前面一个数两两比较,直到把最小一个数放到第二位。以此类推。
  • 快速排序:将第一个数A1作为分割点,小于A1的放到A1前面,大于A1的放到A1后面,这样就有两个集合A,B,然后分别把A,B的第一个数分别作为各自的分割点,继续分割出4个集合,以此类推,继续分出8个集合,直至每个集合中只剩一个元素。可以想象成这个过程是一个树,所以要用递归。 
  • 选择排序:第一趟,选择第一个数作为标准,逐一比较后面的数,比它小的与之替换;第二趟,选择第二个数作为标准,逐一比较后面的数,比它小的与之替换,以此类推,每趟都会得出最后的数,这个算法适合从大量数据中中选择一部分排序记录。
  • 堆排序:
  • 归并排序:
  • 基数排序: 
二分查找:
int
binary_search(
int
*
a,
int
len,
int
goal)
{
int
low
=
0
;
int
high
=
len
-
1
;
while
(low
<=
high)
{
int
middle
=
(low
+
high)
/
2
;
if
(a[middle]
==
goal)
return
middle;
//
在左半边
else
if
(a[middle]
>
goal)
high
=
middle
-
1
;
//
在右半边
else
low
=
middle
+
1
;
}
//
没找到
return
-
1
;

} 

转载于:https://www.cnblogs.com/skywithcloud/archive/2011/11/30/2167124.html

你可能感兴趣的文章
RabbitMQ安装,Windows下
查看>>
0415评论博客
查看>>
CSAPP buffer lab记录——IA32版本
查看>>
Hyperledger fabric多机的环境部署
查看>>
关于sqlserver2008 bcp根据数据表导出xml格式文件的小记
查看>>
总结:栈和队列的学习
查看>>
装个centos虚拟机之设置桥接网络
查看>>
线段树(可能还会有树状数组吧)
查看>>
dedecms2
查看>>
O365批量重置用户密码
查看>>
Gartner:安全服务市场预测2011-2015
查看>>
约瑟夫·奈:透视网络空间
查看>>
在VS2012中实现Ext JS的智能提示太简单了
查看>>
理解并实施:HSRP(CCNA200-120新增考点)
查看>>
关于如何去理解和取证生成树(STP)的BackboneFast机制对劣质BPDU的处理
查看>>
LoadRunner 如何将英文的字符串转换成UTF-8格式的字符串?
查看>>
Oracle系列:安装Oracle RAC数据库(二)
查看>>
nginx 另一WAF方式
查看>>
LinkedTransferQueue学习导引
查看>>
对restore database preview显示结果的思考
查看>>