排序演算法是面試時面試官經常提的問題,最初的時候我只是死記硬背,現在花時間理解透每乙個演算法背後的真諦,做到理解熟記於心
交換排序:氣泡排序與快速排序
插入排序:直接插入排序與折半插入排序以及希爾排序
選擇排序:簡單選擇排序與堆排序
歸併排序
基數排序
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課設的時候,氣泡排序也把我整一段時間才迷糊...