快排的思路:找到一个基准数,把大于基准数的数字放在基准数的右边部分,小于基准数的放在左边部分;排完后,再对左边部分和右边部分分别进行上述操作,递归下去,直到子序只剩下一个数字。
其中快排的时间复杂度为O(nlogn),空间复杂度为O(nlogn),但算法相对不稳定。
function quicksort(arr,left,right) {
var i = left;
var j = right;
var temp = arr[left]; //保存基准数
if(left>=right) return ;
while(i!=j){
while(i<j&&arr[j]>=temp){
j--;
}
if(i<j){
arr[i]=arr[j];
}
while(i<j&&arr[i]<=temp){
i++;
}
if(i<j){
arr[j]=arr[i];
}
}
arr[i]=temp;
quicksort(arr,left,i-1);
quicksort(arr,i+1,right);
}
var arr = [8,2,6,12,1,9,5,5,10];
quicksort(arr,0,8);
alert(arr);