js實現常用的10大排序演算法

2021-09-25 00:00:25 字數 1753 閱讀 4342

排序演算法是面試時面試官經常提的問題,最初的時候我只是死記硬背,現在花時間理解透每乙個演算法背後的真諦,做到理解熟記於心

交換排序:氣泡排序與快速排序

插入排序:直接插入排序與折半插入排序以及希爾排序

選擇排序:簡單選擇排序與堆排序

歸併排序

基數排序

1.氣泡排序

氣泡排序的演算法思想是就是不停地比較相鄰記錄的關鍵字,如果不滿足排序要求,就交換相鄰記錄,直到所有的記錄已經排好序為止。

function bubblesort(arr) }}

return arr;

}

2.快速排序

快速排序思想:

(1)待排序序列s中任意選擇乙個記錄r作為軸值(記錄r的關鍵字為k)。

(2)將剩餘的記錄分割成兩個子串行l和r,子串行l中的關鍵字均小於或等於k,子串行r中所含記錄的關鍵字均大於或等於k。

(3)將子串行l中所有記錄放在記錄r左邊,子串行r中所有記錄放在記錄r右邊,此時記錄r左邊記錄的關鍵字小於或等於k,記錄r右邊的關鍵字大於或等於k,因此記錄r整好處於正確的位置。

(4)對於子串行l和r遞迴進行快速排序,直到子串行中只含有0或1個元素,退出遞迴。

在具體實現時步驟(2)、(3)可以同時實現,即在分割的過程中將所有小於等於軸值得記錄放在軸值r左邊,將大於或等於它的記錄放在它的右邊。這個過程的實現是通過交換記錄來實現的。快速排序演算法的關鍵在於分割過程的實現。

function quicksort(arr) 

// 分割槽

function partition(arr, left, right)

}// 最後: 將pivot交換到storeindex處,基準元素放置到最終正確位置上

swap(arr, right, storeindex);

return storeindex;

} function sort(arr, left, right)

sort(arr, 0, arr.length - 1);

return arr;

}

3.選擇排序

思想:選擇排序的基本思想是:每一趟在n-i+1(i=1,2,...n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。

function selectionsort(arr)

}function heapify(arr, i)

if (right < len && arr[right] > arr[largest])

if (largest != i)

}function swap(arr, i, j)

function heapsort(arr)

return arr;

}5.直接插入排序

function insertionsort(arr) 

arr[preindex+1] = current;

} return arr;

}

6.希爾排序

其思想是:先將待排序序列分割為若干個子串行分別進行直接插入排序;待整個序列基本有序時,在對全體記錄進行一次直接插入排序。

function shellsort(arr) 

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

arr[j+gap] = temp;

}} return arr;

}

js 10 大排序演算法

演算法思想 js實現 const swap function arr,i,j const merge function left,right else while left.length result.push left.shift while right.length result.push ri...

10大排序演算法總結

1 2 3 3.1 氣泡排序 把第乙個元素與第二個元素比較,如果第乙個比第二個大,則交換他們的位置 接著繼續比較第二個與第三個元素,如果第二個比第三個大,則交換他們的位置 對每一對相鄰元素作同樣的工作,這樣一趟比較交換下來之後,排在最右的元素就會是最大的數 除去已經選出的,最右邊的元素,對剩餘的元素...

10大排序演算法(C語言實現)

大一剛放寒假期間,回想一下馬上進入大學時的心情,記得在暑假時加了乙個學校acm戰隊的群,當時感覺很美好,想開學的時候努力一下進入校隊的acm。可是自己又特別喜歡滲透,於是就把acm這個想法放下了,這幾天把sqllabs幹完了,出於閒想看看演算法。記得當時寫c課設的時候,氣泡排序也把我整一段時間才迷糊...