快速排序思想:數組
找一個元素做爲基準,而後對數組進行分區,使基準左邊的數據比基準值小,基準右邊的數據比基準值大,如此做爲基準的元素調整到排序後的正確位置。而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程遞歸進行,使得數據正確排序。ui
之前經常使用的方法:spa
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數組的特性來寫特別方便,也容易理解:code
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]);
上面兩種都是爲了將小的數據移到基準左側,大的數據移到基準右側,只是使用的方法不一樣。blog