js常用排序總結

2021-10-07 01:58:06 字數 3816 閱讀 3810

1.氣泡排序

氣泡排序法又稱為交換排序法,是從觀察水中氣泡變化構思而成。原理是從第乙個元素開始,比較相鄰元素的大小,若大小順序有誤,則對調後再進行下乙個元素的比較。如此經過第一次掃瞄後就可以確保最後乙個元素位於正確的順序;經過第二次掃瞄可以確保倒數第二個元素位於正確的順序。由此可知,n個元素經過(n-1)次掃瞄,就可以完成所有元素的排序。

//氣泡排序  

var arr =[4

,1,2

,5,8

,3,6

];var temp = null;

for(var i =

0; i < arr.length; i++)}

} console.

log(arr)

;// 氣泡排序的時間的複雜度為n*n

2.快速排序

快速排序(quick sort)是由c.a.hoare所提出來的。快速排序法又稱分割交換排序法,是目前公認最佳的排序法,也是使用「分而治之」(divide and conquer)的方式,先在資料中找到乙個虛擬的中間值,並按此中間值將所有打算排序的資料分為兩部分。其中,小於中間值的資料放在左邊,大於中間值的資料放在右邊,再以同樣的方式分別處理左、右兩邊的資料,直到排序完為止。

快速排序的步驟:

(1) 選擇基準值。

(2) 將陣列分成兩個子陣列:小於基準值的元素和大於基準值的元素。

(3) 對這兩個子陣列進行快速排序。

演算法簡單描述:選擇陣列第一位元素位基準值,建立兩個新陣列,分別存放小於基準值和大於基準值的元素。然後這兩個新陣列遞迴進行上述操作,直到陣列為空。然後將左右陣列和基準值進行拼接。

//快速排序  使用遞迴 陣列折半

var arr1 =[1

,9,2

,7,8

,2,5

,3,6

,4];

function quicksort

(arr)

if(array.

isarray

(arr)

)else

}//使用遞迴是快排 每次取中間排完再呼叫兩邊重新排序

return

quicksort

(left)

.concat

(centernum)

.concat

(quicksort

(right));

}}console.

log(

quicksort

(arr1));

//快速排序的平均時間複雜度為nlogn;

插入排序

插入排序法(insert sort)是將陣列中的元素,逐一與已排序好的資料進行比較,前兩個元素先排好,再將第三個元素插入適當的位置,所以這三個元素仍然是已排好序的,接著將第四個元素加入,重複此步驟,直到排序完成為止。可以看作是在一串有序的記錄r1、r2…ri中,插入新的記錄r,使得i+1個記錄排序妥當。

//插入排序;

//原理預設第乙個已經排序 取到當前的和之前的比對 如果滿足條件 交換位置

var arr2 =[1

,9,2

,7,8

,2,5

,3,6

,4];

function insertsort

(arr)

for(var i =

0; i < arr.length; i++

) arr[previndex +1]

= nownum;

} console.

log(arr);}

insertsort

(arr2)

;

選擇排序

選擇排序法(selecting sort)也算是列舉法的應用,就是反覆從未排序的數列中取出最小的元素,加入到另乙個數列中,最後的結果即為已排序的數列。從小到大排序的操作是一開始在所有的資料中挑選乙個最小項放在第乙個位置,再從第二項開始挑選剩下元素的最小項放在第2個位置,以此反覆,直到完成排序為止。由此可知,n個元素經過(n-1)次掃瞄,就可以完成所有元素的排序。

// 選擇型排序

var arr3 =[1

,9,2

,7,8

,2,5

,3,6

,4];

function selectsort

(arr)

var temp = null;

for(var i =

0; i < arr.length; i++

)//交換位置

temp = arr[i]

; arr[i]

= arr[minindex]

; arr[minindex]

= temp;

} console.

log(arr);}

selectsort

(arr3)

;

5.歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。

1、把長度為n的輸入序列分成兩個長度為n/2的子串行;

2、對這兩個子串行分別採用歸併排序;

3、將兩個排序好的子串行合併成乙個最終的排序序列。

//歸併排序

var arr4 =[1

,9,2

,7,8

,2,5

,3,6

,4];

function mergesort

(arr)

//首先將無序陣列劃分為兩個陣列

var mid = math.

floor

(arr.length /2)

; var left = arr.

slice(0

, mid)

; var right = arr.

slice

(mid, arr.length)

;return

merge

(mergesort

(left)

,mergesort

(right));

//遞迴分別對左右兩部分陣列進行排序合併

}//合併

function merge

(left, right)

else

}while

(left.length)

while

(right.length)

return result;

} console.

log(

mergesort

(arr4)

);

js 常用排序

1.氣泡排序 function bubblesort arr return arr 2.插入排序 3.選擇排序 原理 遍歷陣列,設定最小值的索引為 0,如果取出的值比當前最小值小,就替換最小值索引,遍歷完成後,將第乙個元素和最小值索引上的值交換。如上操作後,第乙個元素就是陣列中的最小值,下次遍歷就可...

常用排序總結

排序法 平均時間 最差情形 穩定度額外空間 備註 冒泡o n2 o n2 穩定 o 1 n小時較好交換 o n2 o n2 不穩定 o 1 n小時較好 選擇 o n2 o n2 不穩定o 1 n小時較好插入 o n2 o n2 穩定 o 1 大部分已排序時較好 基數 o logrb o logrb ...

常用排序總結

總結一下面試當中經常問到的排序演算法 1 氣泡排序 package com.zj.sort public class maopaosort public static void main string arqs maopaosort ms new maopaosort ms.sort test fo...