当前位置: 首页 > 科技观察

你可能不知道的快速排序:三路快速排序

时间:2023-03-13 21:26:38 科技观察

快速排序什么是快速排序快速排序是由图灵奖获得者C.A.R.Hoare(1934--)于1960年提出的,快速排序是对冒泡排序的改进。它的基本思想是:通过一次排序将待排序的数据分成两个独立的部分,一个部分的所有数据都小于另一部分的所有数据,然后用这种方法将两部分数据分开对于快速排序,可以递归地进行整个排序过程,使整个数据成为一个有序的序列。整个排序过程只需要三步:在数据集中,选择一个元素作为“基线”(pivot)。所有小于“基准”的元素都被移到“基准”的左边;所有大于“基准”的元素都移到“基准”的右侧。对于“基线”左右的两个子集,重复第一步和第二步,直到所有子集都只剩下一个元素。引用自维基百科快速排序(英文:Quicksort),又称分区交换排序,是TonyHall最先提出的一种排序算法。平均而言,对n项进行排序需要O(nlogn)次比较。在最坏的情况下需要进行O(n2)次比较,但这并不常见。事实上,快速排序通常比其他OO(nlogn)算法快得多,因为它的内部循环可以在大多数体系结构上有效地实现。步骤找到数组的参考点(中间数),创建左右两个空数组;遍历数组,取出数组中的每一个数与参考点进行比较,如果小于参考点,则放入左数组,如果大于参考点,则放入右数组;递归地左右调用数组。方法一functionquickSort(arr){if(arr.length<=1){returnarr;}varleft=[],right=[],baseDot=Math.round(arr.length/2),base=arr.splice(baseDot,1)[0];for(vari=0;i可以看到对重复数据的数据优化还是很可观的