快速排序
快速排序
快排的思路:找到一个基准数,把大于基准数的数字放在基准数的右边部分,小于基准数的放在左边部分;排完后,再对左边部分和右边部分分别进行上述操作,递归下去,直到子序只剩下一个数字。
其中快排的时间复杂度为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);