快排算法图解JS

169 阅读1分钟

快排算法图解(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;
 }

图片思路参考《啊哈!算法》一书,推荐这本算法入门书籍