快排算法图解(JS)
步骤:1,让第一个数6,成为基准值,然后准备2个指针,从数组两端开始往中间探测
2,士兵j先动(注意是j先动),一步一步往左,j - - ,遇到小于基准值6的数,停下不动,士兵i一步一步往右移动,i + +,遇到大于基准值6的数,停下不动,两个士兵的值进行交换
3,交换完成,两个士兵继续前进
步骤:
4,第一次交换完成后,遇到第二次交换,i对应值9,j对应值4,进行交换
5,i,j两士兵在值3处相遇,于是两士兵都停下来
6,将基准值6与相遇处的值进行交换
步骤:
7,第一轮探测结束,以基准数6为分界点,6左边的数小于6,6右边的数大于6,将数组拆分成两个数组,左边的是[3, 1, 2, 5, 4],右边的是[9, 7, 10, 8]
8,按之前的方法处理两个数组,第一个数为基准值
9,直到不可拆分出新的子数组为止
上代码:
var arr1 = [6,1,2,7,9,3,4,5,10,8];
quickSort(arr1,0,arr1.length-1);
function quickSort(arrs:number[],start:number,end:number) {
if(start > end) return;
var i:number = start;
var j:number = end;
var pivot:number = arrs[start];
while(i != j){
while(arrs[j] >= pivot && j > i) j--;
while(arrs[i] <= pivot && i < j) i++;
if(i < j){
swaper(i,j,arrs);
}
}
arrs[start] = arrs[i];
arrs[i] = pivot;
quickSort(arrs,start,i-1);
quickSort(arrs,i+1,end);
return;
}
function swaper(i:number,j:number,arr:number[]) {
var temp:number = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
图片思路参考《啊哈!算法》一书,推荐这本算法入门书籍