码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法总结

时间:2015-11-01 01:41:44      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

插入排序(Insert Sort)

for j = 2 to A.length
  key = A[j]
  // Insert A[j] into the sorted sequence A[1...j-1]
  i = j - 1;
  while i>0 and A[i] > key //until the head of array of find an element less than key
    A[i + 1] = A[i] //A[j] stored in key,so you can more A[i] into A[j]
    i = i - 1
  A[i + 1] = key

 

技术分享
该算法时间复杂度为θ(n2)

P与NP
如果问题的时间复杂度可以写成多项式时间复杂度,则为P问题,否则为NP问题。


归并排序(Merge Sort)
归并排序是分治法的运用:将大的问题进行分隔,然后将分别计算,最后将小的结果进行合并
技术分享
时间复杂度为θ(nlgn)
技术分享

求最大子数组问题
使用分治法求出左右两边中的最大子数组,以及夸两边(中心点出发两边)的子数组,比较三者大小,得出最大子数组。

矩阵乘法(Strassen算法)
将大型矩阵分解成四个小矩阵,然后在分别计算小矩阵相乘的结果。
当维度不是偶数个数时,可以补零,最后的结果中再去掉

堆排序(Heap Sort)

堆(基于数组的逻辑二叉树)
技术分享

本身为i,左子节点为2i,右子节点为2i+1,父节点为i/2
父节点的值比子节点的值都大的堆称之为最大堆,最小堆则相反。

使用递归(分治法)将堆初始化为最大堆:
技术分享

堆排序过程
技术分享
时间复杂度为nlgn
其特点是速度跟归并排序一样,空间复杂度跟插入排序一样(原址排序),兼备归并排序和插入排序的优点。

快速排序

技术分享
时间复杂度:nlon

总结:分治法不光可以使用在排序上,还可以使用在对一些大量数据的处理中。因为分治法将大量数据的时间复杂度降低到nlgn以下,既然能够在这么短的时间内进行排序,那么就可以在这么短的时间内(或者差不多的时间内)做完其他的事情。这是分治法对处理数据上带来的新思路。

排序算法总结

标签:

原文地址:http://www.cnblogs.com/imhuqiao/p/4926564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!