为了账号安全,请及时绑定邮箱和手机立即绑定

sort(sortMethod);原理

看了很多人的回答,千篇一律无从理解,自己研究了一下算法原理终于明白了。

  1. 首先sort函数会将myArray[0],myArray[1],赋值给a,b

  2. 然后sortMethod函数会进行a,b的整数数值比较(假设我们需要的是升序即a-b),且return a-b;

  3. sort函数根据sorMethod返回的值 -1,0,1,分别将a放在b的前、不动、后,三个位置。

  4. a值不变,b值分别为myArray[2],myArray[3]……myArray[myArray.length-1],每一次都进行上述三个步骤。

  5. a被分别赋值数组中的每个元素,进行上述四个步骤。

正在回答

3 回答

有说-1就调换吗,1就调换吗,有说会自动载入函数吗,啊?


1 回复 有任何疑惑可以回复我~

显示不出来啊

标准库sort():函数并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。

0 回复 有任何疑惑可以回复我~


个人理解:

return 1      说明 a - b>0  ;a要放在b的后面

return  -1    说明 a-b <0   ; a要放在b的前面

return  0     说明  a- b  = 0  ;   a和b的值相等,两者不发生调换  

0 回复 有任何疑惑可以回复我~
#1

金刚无敌葫芦娃

应该是这样吧 return >=1,则表示 A 在排序后的序列中出现在 B 之后。 return <=-1,则表示 A 在排序后的序列中出现在 B 之前。 return >-1 && <1,则表示 A 和 B 具有相同的排序顺序。 网上查的 标准库sort():函数并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。
2020-03-17 回复 有任何疑惑可以回复我~
#2

金刚无敌葫芦娃

标准库sort();函数并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。
2020-03-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

sort(sortMethod);原理

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信