快速排序,快速排序演算法
快速排序(js實現)
function Quicksort(a) { Qsort(a, 0, a.length - 1); return a; } function Qsort(a, low, high) { var pivot; if (low < high) { pivot = Partition(a, low, high); Qsort(a, low, pivot - 1); Qsort(a, pivot+1, high); } } function Partition(a, low, high) { var temp; var pivotKey; pivotKey = a[low]; while (low < high) { while (low < high && a[high] >= pivotKey) high--; temp = a[high]; a[high] = a[low]; a[low] = temp; while (low < high && a[low] <= pivotKey) low++; temp = a[low]; a[low] = a[high]; a[high] = temp; } return low; }測試:
function getRandom() { var count = 15; var random; var a = new Array(); while (count--) { random = Math.floor(Math.random() * 1000); a.push(random); } return a; }結果:
快速排序的演算法思想最好還是看看資料結構的相關書籍吧,我這裡只是簡單的說下。快速排序就是冒泡排序的升級版本,實現思想就是預先設定一個所謂的中間量(piovtkey),從low和height兩個方嚮往中間走,完成把比piovtkey大的放右邊,小的放左邊。
function Partition(a, low, high) { var temp; var pivotKey; pivotKey = a[low]; while (low < high) { while (low < high && a[high] >= pivotKey) high--; temp = a[high]; a[high] = a[low]; a[low] = temp; while (low < high && a[low] <= pivotKey) low++; temp = a[low]; a[low] = a[high]; a[high] = temp; } return low; }
然後在遞迴調用.
if (low < high) { pivot = Partition(a, low, high); Qsort(a, low, pivot - 1); Qsort(a, pivot+1, high); }