快速排序
快速排序思想:
找一个元素作为基准,然后对数组进行分区,使基准左边的数据比基准值小,基准右边的数据比基准值大,如此作为基准的元素调整到排序后的正确位置。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,使得数据正确排序。
以前常用的方法:
function quicksort(arr, low, high) { low = typeof low == 'number' ? low : 0; high = typeof high == 'number' ? high : arr.length-1; var left = low, right = high; if(low < high){ var key = arr[left]; while(left < right) { while(left < right && arr[right] >= key) { right--; } arr[left] = arr[right]; while(left < right && arr[left] <= key) { left++; } arr[right] = arr[left]; } arr[left] = key; quicksort(arr, low, left-1); quicksort(arr, left+1, high); } return arr; } //var arr = quicksort([1,3,4,2]);
看了阮一峰老师的博客后,发现用JS数组的特性来写特别方便,也容易理解:
function quicksort(arr) { if (arr.length == 0) return []; var left = new Array(); var right = new Array(); var pivot = arr[0]; for (var i = 1; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quicksort(left).concat(pivot, quicksort(right)); } //var arr = quicksort([1,3,4,2]);
上面两种都是为了将小的数据移到基准左侧,大的数据移到基准右侧,只是使用的方法不同。