常見演算法例項

2021-09-13 12:24:18 字數 2409 閱讀 1167

氣泡排序就是每次量量比較相鄰的元素,進行判斷大小然後進行值的交換,如果把陣列中的待比較的元素當做在水中的混亂的元素的話,那麼這個排序過程就像是乙個個水泡在往上冒出來,這也是氣泡排序的名字來由,不多說,見**示例:

public void bubblesort(integer array) 

}// 如果沒有交換過說明順序是本來就正確的 不需要排序 直接跳出

if (!exchanged)

break;

}spendtime = new bigdecimal(system.currenttimemillis()).subtract(timestart);

// system.out.println("排序後: " + arrays.aslist(array));

}

值得注意的是常見的氣泡排序很多人是僅僅追求了自己實現氣泡排序的正確性,而沒有考慮過是否可以優化,本文中,其中利用的exchanged標誌就是優化的方案,可以發現這短短幾句**對於時間上有了很大的提公升,效果見下:

//這裡使用junit進行測試

@test

public void testsort()

bubblesort(array);

}

這是沒有設定flag的情況:

這是設定了flag的情況

(此資料在本台計算機結果是這樣,不同時間也可能不同,與計算機環境有關,但是大多情況是設定這樣乙個標誌的方式會對效能進行一定的提公升)

那麼,為什麼會出現這樣乙個差別呢?

設立標誌exchanged的時候,我們可以這樣想:如果當前的兩個發生了交換,說明了之前的是已經交換好了的,因此不需要做多餘的判斷與交換。

選擇排序就是假定陣列第乙個位置為最小的值的位置,然後與剩下的進行乙個乙個對比,找到最小的元素的位置,然後進行交換,接著假設第二個位置作為最小資料的位置,重複以上步驟。看看實現吧:

public void selectsort(integer array) 

}//以下的判斷其實不是必須的,但是可以減少對空間的占用,減少交換的操作。

if (minindex != i)

}spendtime = new bigdecimal(system.currenttimemillis()).subtract(timestart);

system.out.println("排序後: " + arrays.aslist(array));

}

插入排序通過對沒有排序的元素進行適當的插入作為排序思想,大概流程如下:

於是乎......

version 1.0 插入排序:大眾普遍版

public void insertionsort(integer array) 

array[position + 1] = temp;

}spendtime = new bigdecimal(system.currenttimemillis()).subtract(timestart);

// system.out.println("排序後: " + arrays.aslist(array));

}

version 2.0 插入排序:就如該函式名字一樣,byfindingposition 這個思路是先找到最合適(即最終需要插入的位置)的位置,記錄下位置,然後根據記錄下的位置進行元素的插入,偏移。2.0這個版本和上一版對比很有趣,乍看上去多了巢狀了乙個迴圈,可是大多情況卻比第乙個快,有人可能會說這個根本不是插入排序,而我卻覺得,只不過上乙個是針對於元素本身的資料進行插入,問我這個是針對於位置的插入,就我而言 其實這個才更像插入排序。

public void insertionsortbyfindingposition(integer array) 

// 找到位置之後需要進行移位 然後把array[i]放在position位置

temp = array[i];

for (int j = i; j > position; j--)

array[position] = temp;

}spendtime = new bigdecimal(system.currenttimemillis()).subtract(timestart);

system.out.println("排序後: " + arrays.aslist(array));

}

python 常見排序例項

使用python 基礎排序演算法設計,氣泡排序,插入排序,快速排序.對一組無序資料進行排序演算法設計,要求如下 輸入 1,3,5,23,75,34,456,86,22,74,37,5,34 輸出 1,3,5,5,22,23,34,34,37,74,75,86,456 核心演算法 迴圈比較相鄰的兩個元...

nginx常見應用例項

1 nginx 中 location 應用例項 location 是 nginx 的精華,nginx 就是通過攔截到的請求去對配置好的 location 塊 location block 進行請求 的,location 就是用來具體配置 路徑的。2 nginx反向 應用例項 1 環境說明 cento...

演算法 常見演算法題

演算法題 假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣 一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次 然後他就說了如果只能夠取10次怎麼辦?一開始我想到...