【CRR算法笔记】排序算法之快速排序

·  阅读 139

快排

快速排序的平均时间复杂度为 O(NlogN)

思路

快速排序是基于一种叫做“二分”的思想 每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。 当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是 O(N2)。

那么我们来写下吧,老实说知道理论,但帅CRR也写不好快排。

function quickSort(arr){
  if (arr.length <= 1) { 
    return arr; 
  }
&emsp;var pivotIndex = Math.floor(arr.length / 2) ;
&emsp;var pivot = arr.splice(pivotIndex, 1)[0];
&emsp;var left = [];
&emsp;var right = [];
  for (var i = 0; i < arr.length; i++){
&emsp;&emsp;&emsp;&emsp;if (arr[i] < pivot) {
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;left.push(arr[i]);
&emsp;&emsp;&emsp;&emsp;} else {
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;right.push(arr[i]);
&emsp;&emsp;&emsp;&emsp;}
&emsp;&emsp;}
&emsp;&emsp;return quickSort(left).concat([pivot], quickSort(right));
}
复制代码
分类:
前端
标签:
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改