基本排序演算法總結

2021-09-13 19:16:08 字數 2877 閱讀 5743

參考部落格:傳送門

目錄

各排序時間複雜度

氣泡排序

選擇排序

插入排序

希爾演算法

堆排序

/**

* 氣泡排序

* 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

* 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

* 針對所有的元素重複以上的步驟,除了最後乙個。

* 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

* @param numbers 需要排序的整型陣列

*/public static void bubblesort(int numbers)

}} }

基本思想:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。

/**

* 選擇排序演算法

* 在未排序序列中找到最小元素,存放到排序序列的起始位置

* 再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。

* 以此類推,直到所有元素均排序完畢。

* @param numbers

*/public static void selectsort(int numbers)

}//交換兩個數

temp = numbers[i];

numbers[i] = numbers[k];

numbers[k] = temp;

} }

基本思想:每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置(從後向前找到合適位置後),直到全部插入排序完為止。

/**  

* 插入排序

* 從第乙個元素開始,該元素可以認為已經被排序

* 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

* 如果該元素(已排序)大於新元素,將該元素移到下一位置

* 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

* 將新元素插入到該位置中

* 重複步驟2

* @param numbers 待排序陣列

*/

public static void insertsort(int numbers)

numbers[j] = temp;

} }

/**希爾排序的原理:

* 根據需求,如果你想要結果從大到小排列,

* 它會首先將陣列進行分組,然後將較大值移到前面,較小值移到後面,

* 最後將整個陣列進行插入排序,這樣比起一開始就用插入排序減少了資料交換和移動的次數,

* 可以說希爾排序是加強版的插入排序

* 拿陣列5, 2, 8, 9, 1, 3,4來說,陣列長度為7,當increment為3時,陣列分為兩個序列 5,2,8和9,1,3,4,

* 第一次排序,9和5比較,1和2比較,3和8比較,4和比其下標值小increment的陣列值相比較

* 此例子是按照從大到小排列,所以大的會排在前面,第一次排序後陣列為9, 2, 8, 5, 1, 3,4

* 第一次後increment的值變為3/2=1,此時對陣列進行插入排序,

*實現陣列從大到小排

*/public static void shellsort(int data) else

} data[j] = temp;

}} }

/**

* 堆排序

* 從序列最後乙個元素開始建堆(到第2個元素停止),然後不斷跟第 1 個元素交換位置。

* 建堆:從當前節點的父節點開始(往前不斷遍歷「父節點」);

* 當此節點存在子節點時,從兩個(或乙個 )子節點中找到最大的下標。

* 然後跟當前父節點交換位置,再把當前最大子節點的下標設定成當前父節點不斷迴圈,

* 直到當前父節點的值是最大的時候退出while迴圈。

* * @param args

*/public static void main(string args) ;

int arraylength=a.length;

//迴圈建堆

for(int i=0;i=0;i--){

//k儲存正在判斷的節點

int k=i;

//如果當前k節點的子節點存在

while(k*2+1<=lastindex){

//k節點的左子節點的索引

int biggerindex=2*k+1;

//如果biggerindex小於lastindex,即biggerindex+1代表的k節點的右子節點存在

if(biggerindex堆是一種佇列結構

最小堆:堆頂元素最小

插入:從最後插入乙個元素,然後查其父節點自底向上對堆進行調整。

刪除:由於其結構特點,只能從堆頂刪除元素,因此刪除後需要對堆進行自頂向下的調整。

快速排序 和 歸併排序 見「小白的演算法筆記本」如有錯誤或不合理的地方,敬請指正~

加油!!

基本排序演算法總結

1.插入排序 insertion sort o n2 對少量資料排序很有效,不需要額外的儲存空間。待排序列已經是從小到大,最壞就是逆序的時候了。且是穩定的。include include int exchange int a,int i,int j int insert int a,int s,in...

基本排序演算法總結

排序演算法很多,這裡做個總結,最重要的是記住演算法思想,而不是記住程式怎麼寫。程式過一段時間就會忘了,演算法原理熟悉了現場寫出來應該是很容易的。時間複雜度為o n 2 的三種排序演算法 插入排序 選擇排序 氣泡排序。插入排序 插入排序是選定元素找位置。對於位置為p上的元素,假定0 p 1的元素已經排...

基本排序演算法總結

排序演算法的評價 評價排序演算法的一般準則是 平均情況下的排序速度 最優最劣情況下的速度 行為是否自然 是否以相等的關鍵字重排元素 陣列的排序速度直接與比較 comparison 次數和交換 exchange 次數相關,其中交換的作用更大,因為占用的時間多。如果頻繁遭遇到最優最劣情況,則最優和最劣情...