經典排序之二 快速排序 二路歸併

2021-08-02 21:48:51 字數 885 閱讀 3292

快速排序,顧名思義效率相比較其他排序方法高,它是一種交換排序

基本思路是

3:對左右兩個陣列做1,2操作,直至陣列裡只有乙個數值

function quicksort(arr)

//splice() 方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。 會改變原陣列

方法對乙個數進行往下取整 小於等於x,且與x最接近的整數

var temp = arr.splice(math.floor(arr.length/2),1)[0];

var arrleft = ;

var arrright = ;

for(var i=0;i=temp) else

}return quicksort(arrleft).concat(temp,quicksort(arrright));

//return arguments.callee(arrleft).concat(temp,arguments.callee(arrright)); 不推薦使用arguments.callee

}var arr1 = [9,2,1,2,8,546,23,0];

quicksort(arr1);

[0, 1, 2, 2, 8, 9, 23, 546]

二路歸併 

//新的知識點 while 迴圈會在指定條件為真時迴圈執行**塊。 只要指定條件為 true,迴圈就可以一直執行**。

function merge(left,right){

var result = ,

il= 0,

ir=0;

while(left.length>il && right.length>ir){

if(left[il]

經典排序之 二路歸併排序

今天最後研究一下二路歸併排序 演算法思想 利用遞迴,將原始序列不斷兩兩分塊,知道每塊剩下乙個元素,這個元素肯定是有序的。然後利用遞迴的原理合併即可 二路歸併排序的最好,最壞,和平均時間複雜度為o nlgn 是一種穩定的排序 演算法實現 1 include2 using namespace std 3...

排序演算法之二路歸併排序

二路歸併排序是歸併排序中最簡單的一種,其演算法思想是假設有兩個有序的序列,然後將這裡兩個序列合併 為乙個序列,只要找這兩個序列中較小的元素即可,最後把剩下的元素複製出來。void mergearray int a,int first,int mid,int last,int temp int i f...

排序演算法之二路歸併排序

二路歸併排序是採用的分而治之的思想。將乙個待排序的序列分成兩個序列,分別對這兩個序列排序。而對於這兩個序列排序的方式也是還之前一樣,將這兩個序列分別分成兩個序列分別排序。一直這樣分割下去,知道序列中沒有元素或者已有乙個元素為止。因為沒有元素的序列和只有乙個元素的序列定是乙個有序的序列,所以相當於將這...