JS快速排序 希爾排序 歸併排序 選擇排序

2022-02-08 02:37:11 字數 2438 閱讀 5795

/*

快速排序

1.1 演算法描述

快速排序由於排序效率在同為o(n*logn)的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想----分治法也確實實用。快速排序是一種既不浪費空間又可以快一點的排序演算法。

1.2 演算法步驟

先從數列中取出乙個數作為「基準」。

分割槽過程:將比這個「基準」大的數全放到「基準」的右邊,小於或等於「基準」的數全放到「基準」的左邊。

再對左右區間重複第二步,直到各區間只有乙個數。

*/var quicksort = function

(arr)

var pivotindex = math.floor(arr.length / 2); //

基準位置(理論上可任意選取)

var pivot = arr.splice(pivotindex, 1)[0]; //

基準數var left =;

var right =;

for (var i = 0; i < arr.length; i++)

else

}return quicksort(left).concat([pivot], quicksort(right)); //

鏈結左陣列、基準數構成的陣列、右陣列

};//

quicksort([1,3,1,2,1,77,3,55,44,66,22,4,1,56,88]);

/*希爾排序

1.1 演算法描述

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。但希爾排序是非穩定排序演算法。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率;

但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位;

希爾排序的基本思想是:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行依次直接插入排序。

1.2 演算法步驟

選擇乙個增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

按增量序列個數 k,對序列進行 k 趟排序;

每趟排序,根據對應的增量 ti,將待排序列分割成若干長度為 m 的子串行,分別對各子表進行直接插入排序。僅增量因子為 1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。

*/function

shellsort(arr)

for (gap; gap > 0; gap = math.floor(gap/3))

arr[j+gap] =temp;}}

return

arr;}/*

歸併排序

1.1 演算法描述

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個典型的應用。

合併排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。

然後再把有序子串行合併為整體有序序列。 將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。

若將兩個有序表合併成乙個有序表,稱為2-路歸併。

*/function

merge(leftarr, rightarr)

return result.concat(leftarr).concat(rightarr); //

剩下的就是合併,這樣就排好序了

} function

mergesort(array)

var arr = mergesort([32,12,56,78,76,45,36]);

console.log(arr);

//[12, 32, 36, 45, 56, 76, 78]

/*選擇排序 類似於氣泡排序

1.1 演算法描述

選擇排序是一種簡單直觀的排序演算法,無論什麼資料進去都是o(n2) 的時間複雜度。所以用到它的時候,資料規模越小越好。

唯一的好處可能就是不占用額外的記憶體空間了吧。

通俗來說就是你們中間誰最小誰就出列,站到佇列的最後邊,然後繼續對著剩餘的無序陣列說你們中間誰最小誰就出列,

站到佇列的最後邊,一直到最後乙個,繼續站到最後邊,這樣陣列就有了順序,從小到大。

1.2 演算法步驟

在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。

重複第二步,直到所有元素均排序完畢。

*/function

selectionsort(arr)

}temp =arr[i];

arr[i] =arr[minindex];

arr[minindex] =temp;

}return

arr;

}

排序(插入排序,希爾排序,歸併排序,快速排序)

1.插入排序 每一步將乙個待排序的元素按照其關鍵字值的大小插入到已排序序列的適當位置,知道待排序元素插入完為止。1 核心 void sort int a,int n 插入排序 a j temp 2 例題 將序列 3,1,4,1,5,9,2,6,5用插入排序排位公升序列。include void so...

幾種排序,希爾排序,快速排序,堆排序,歸併排序

因為最近看了一點stl,所以用vector代替了陣列,從別的地方借鑑了很多,只是簡單的實現,也沒有做什麼優化,其實也不會 include include includeusing namespace std void print vectorv swap v left v high quick so...

氣泡排序 希爾排序 歸併排序 快速排序效能分析

本 用來測量分析氣泡排序 希爾排序 歸併排序 和快速排序在陣列大小不同的情況下的用時情況。使用函式比較兩個陣列是否一致 bool check int s,int s2,int len s k gap temp 歸併排序 void gsort int s,int l,int r for int t 0...