1 function quickSort(array, left, right) { 2 // 当没有给出left,right参数时,为默认值 3 var left = left || 0, 4 right = right || array.length - 1; 5 if (left >= right) { 6 return array; 7 } 8 // 索引值,每次为数组的第一个元素 9 var index = array[left]; 10 // 设置哨兵i和j 11 var i = left, 12 j = right; 13 // 当两个哨兵未相遇时,进行后续处理 14 while (i != j) { 15 // 先让哨兵j开始向左跑动,直到找到比索引值小的数 16 while (array[j] >= index && i < j) { 17 j--; 18 } 19 // 再让哨兵i向右跑动,直到找到比索引值大的数 20 while (array[i] <= index && i < j) { 21 i++; 22 } 23 // 当哨兵i还在哨兵j左边时,将其进行交换 24 if (i < j) { 25 var t = array[i]; 26 array[i] = array[j]; 27 array[j] = t; 28 } 29 } 30 // 当哨兵i和j相遇时,将索引值和哨兵进行交换 31 array[left] = array[i]; 32 array[i] = index; 33 // 递归调用,再去处理索引值左边部分和右边部分 34 return quickSort(array, left, i - 1); 35 return quickSort(array, i + 1, right); 36 }
这几天琢磨了下算法,好久没搞这东西感觉自己编程能力都退化了,就又拿出来练练了,以前都是用c去写的,现在学js就想着拿这个来实现了下。