编程语言
首页 > 编程语言> > 排序算法

排序算法

作者:互联网

1.  排序算法面试中  面试高频又快排、堆排和归并排序

先说快排,快排体现的的思想是:分而治之,并且递归

 

怎么个分呢, 选第一个数进行强行将数据分成两拨。

此时需要一个函数强行分开。名字随便写一个

 

 这个方法是很重要的:(一般出问题的就是这个方法):

形式是简单的:

 

 就一个找middle,一个递归函数。(递归是不去用理解的,你只需要把它当成一个已经解决问题的方法就行了)

找middle有很多种方法(魔鬼在细节好可怕啊)

1.  覆盖

  首先看while循环

  覆盖的方法: 可以让 left = right出圈。   先从右边开始移动

  

 

2.  交换

  记住,在出while循环的时候,一定要让i > j ,如果 循环跑出来的是i==j 那么,当j最后是一个很大值的话,就出问题了

  

 

 

快排的思想感觉像是强制让每个元素找准自己的定位

归并排序:体现的是先分再合的思想。

其核心代码:

  先局部后全局。

  

 

 

堆排序:首先是建堆

  

 

   建堆的过程就是调堆,将小的值下沉,然后形成局部的最大堆,然后从底层一直向上走,就建成整体的最大堆。

  建立堆之后,将堆顶和最后一个值交换,然后调堆,让顶部的元素下沉。

  因此调堆的过程就是小元素下沉的过程,最重要的调堆,就是一个下沉,并且是递归下沉

  

 

   建堆就从最小的堆开始往上建堆:

  

 

 

 

  

 

标签:递归,建堆,调堆,快排,算法,排序,下沉
来源: https://www.cnblogs.com/followers/p/16593523.html