排序 

【数据结构】排序

排序总结

【数据结构】排序

去这里看:八大排序算法

记忆总结(摘自我的考研复习笔记啊,率辉??):

(快)快速排序、(些)希尔排序、(归)归并排序、(队)堆排序

  • 时间复杂度:快些以nlogn的速度归队!!
  • 空间复杂度:记特殊的就好,快排logn,归并n,其他都是1
  • 稳定性总结:心情不稳定,快些选一堆好友来聊天!!

与排序原理有关的细节

  • 经过一趟排序,能够保证一个元素到达最终位置,这样的排序是交换类的那两种(冒泡、快排),和选择类的那两种(简单选择、堆)。
  • 排序方法的元素比较次数和原始序列无关——简单选择和折半插入。
  • 排序方法的排序趟数和原始序列有关——交换类的排序。

一个有用的结论:

借助于”比较“进行排序的算法,在最坏情况下能达到的最好的时间复杂度是O(nlogn)。


快排最爱考,背都要背下来!!

【数据结构】排序

【数据结构】排序

堆排序有点难,so堆排序:白话讲排序系列(六) 堆排序(绝对让你明白堆排序!)

当为大顶堆:

  1. 将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区
  2. 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn)
  3. 由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,......Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2....Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成

归并排序

归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。

将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。

归并排序中可选取merge()函数内的“归并操作”作为基本操作。merge()函数的作用是将两个有序序列归并成一个整体有序的序列。“归并操作”即为将待归并表中的元素复制到一个存储归并结果的表中的过程。在顺序表中,merge()函数的“归并操作”执行次数为要归并的两个子序列中元素个数之和。

常见的五类排序算法图解和实现(归并类:二路归并排序)

【数据结构】排序

看成是 n 个有序的子序列(长度为 1),然后两两归并。

【数据结构】排序

得到 n/2 个长度为2 或 1 的有序子序列。继续22归并。

【数据结构】排序

最后一趟

【数据结构】排序

emmm,还是放上代码,记忆有助于理解????

【数据结构】排序

冒泡

冒泡排序算法的运作如下:

  • 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

【数据结构】排序

简单选择

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

【数据结构】排序

 

代码

戳戳戳,放代码!!

 

 

 

相关文章: