function mergesort(myarray)
var middle = math.floor(myarray.length / 2),
left = myarray.slice(0, middle),
right = myarray.slice(middle),
params = merge(mergesort(left), mergesort(right));
// 在返回的陣列頭部,新增兩個元素,第乙個是0,第二個是返回的陣列長度
params.unshift(0, myarray.length);
// splice用來替換陣列元素,它接受多個引數,
// 第乙個是開始替換的位置,第二個是需要替換的個數,後面就是所有新加入的元素。
// 這一句的意思就是原來的myarray陣列替換成排序後的myarray
// 返回排序後的陣列
return myarray;
}function merge(left, right) else
}return result.concat(left.slice(il)).concat(right.slice(ir));
}var arr = [12, 33, 54, 35, 4, 6, 98, 9, 5, 7, 3, 6, 14, 6, 145, 1, 235];
console.log("mergesort",mergesort(arr));
function swap(myarray, firstindex, secondindex)
function partition(myarray, left, right)
while (myarray[j] > pivot)
if (i <= j)
}return i;
}function quicksort(myarray, left, right)
if (index < right)
return myarray;
}console.log(quicksort(arr));
經典排序 快速排序 合併排序 堆排序
一 快速排序 思想 用樞紐元素pivot將待排陣列分成兩個子表,左表中元素全都小於右表元素,遞迴執行 int partition int a,int low,int high for int i low,j mid 1,k i i mid j high k else while j high a k...
排序 合併排序
與很多有用的演算法類似,合併排序基於這樣乙個技巧 將 2 個大小為 n 2 的已排序序列合併為乙個 n 元素已排序序列僅需要 n 次操作。這個方法叫做合併。我們用個簡單的例子來看看這是什麼意思 通過此圖你可以看到,在 2 個 4元素序列裡你只需要迭代一次,就能構建最終的8元素已排序序列,因為兩個4元...
常用排序演算法 合併排序和快速排序
分治 divide and conquer 是一場常見的演算法策略。分治策略的基本思想就是對於乙個問題規模為n的問題,將其劃分為規模足夠小的k個子問題,子問題由於規模足夠小可以直接求解,最後將規模足夠小的k的問題的解合併得出原問題的解。分治策略的問題的求解過程的一般套路就是 判斷問題規模,足夠小進入...