javascript实现快速排序

tech2022-12-27  120

快速排序思想:

快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 (2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 (3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 (4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

时间复杂度:O(nlogn)

空间复杂度:快速排序使用递归,递归使用栈,因此它的空间复杂度为O(logn) 稳定性:快速排序无法保证相等的元素的相对位置不变,因此它是不稳定的排序算法

代码:

<script type="text/javascript"> function quick_sort(arr,l,r){ var i=l; var j=r; var key=arr[l]; if(l>=r){ return } while(i<j){ while(i<j&&arr[j]>key){ j--; } while(i<j&&arr[i]<=key){ //这个地方的=很重要,因为从arr[l]开始,arr[l]==key,为了让进循环需要用<= i++; } if(i<j){ let temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } arr[l]=arr[i]; arr[i]=key; quick_sort(arr,l,i-1); quick_sort(arr,i+1,r); } var arr=[5,7,1,3,9,10,4,12,11]; console.log(arr); quick_sort(arr,0,arr.length-1); console.log(arr) </script>

结果:

最新回复(0)