java减治法深度优先查找_排序|减治法实现排序
總結一下排序嘿;)
有插入排序和拓撲排序。
1.插入排序/直接插入排序
假設對較小的數組A[0...n-2]已經排好序了,然后把A[n-1]找到一個合適的位置插進去。一般來說是從右向左掃描這個有序的數組,直到遇到第一個小于A[n-1]的元素,然后把A[n-1]插在這個元素的后面,插入的這個位置往往不是最終的位置。
for ( int i = 1; i < a.length; i++) {
int v =a[i];
int j=i-1;
while(j>=0&& a[j]>v) {
a[j+1] = a[j];
j--;
}
a[j+1]=v;
}
最壞的情況是輸入一個嚴格遞減的數組,C(worst)=((n-1)*n)/2。在這種情況下和蠻力法中的冒泡排序的鍵值比較次數是完全相同的。最好的情況是按照升序排列的數組,C(best)=n-1。對該算法平均效率的分析主要基于對無序數組的研究,平均比較次數是降序數組的一半,C(avg)=(n^2)/4;
2.拓撲排序
為了使拓撲排序成為可能,圖必須是一個無環有向圖。如果一個圖沒有回路,拓撲排序有解。有兩種高效的算法,既可以驗證一個有向圖是否是一個無環有向圖,又可以在是情況下,輸入拓撲排序的一個頂點序列。
第一種:深度優先查找的簡單應用。
執行一次DFS遍歷,并記住頂點變成死端(即退出遍歷棧)的順序。將該次序反過來就得到拓撲排序問題的一個解。
第二種:基于減治技術的直接實現。
在有向圖中求出一個源(一個沒有任何輸入邊的頂點),把它和所有從它出發的邊都刪除。如果有多個這樣的源,隨意選擇一個。源不存在,則無解。頂點被刪除的次序是拓撲排序問題的一個解。
源刪除算法獲得的解和基于DFS的算法求得的解不同,兩者都正確,所以,拓撲排序問題可能會有若干個不同的可選解。
總結
以上是生活随笔為你收集整理的java减治法深度优先查找_排序|减治法实现排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11 为了进一步_浅聊小米11发布会
- 下一篇: 蚂蚁森林快捷指令_iPhone「快捷指令