版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/channyfish/article/details/77270871
快排
1.基本原理:快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
2.算法实现:
<1>.从数列中挑出一个元素,称为 “基准”(pivot);
<2>.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
<3>.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
function quickSort(arr,left,right){
var i=left;
var j=right;
var temp;
while(i<j) {
for (; i < j && arr[j] >= arr[left]; j--);
for (; i < j && arr[i] <= arr[left]; i++);
if (i < j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
temp=arr[left];
arr[left]=arr[i];
arr[i]=temp;
if(i>left){
quickSort(arr,left,i-1);
}if(right>i){
quickSort(arr,i+1,right);
}
}
arr=[3,5,2,6,1,7,9,4,8];
quickSort(arr,0,8);
alert(arr);
3.时间复杂度
最好情况:O(nlogn);
最坏情况:O(n^2); //有序序列时;
平均情况:O(nlogn);
4.空间复杂度
O(logn);
5.不稳定性
一个数组 2,1,1 第一轮交换时 2和第二个1交换,两个1的位置发生了变化,所以是不稳定的。