排序演算法之一 氣泡排序 選擇排序 插入排序

2021-09-02 21:44:21 字數 1212 閱讀 8332

1.氣泡排序

原理:比較兩個相鄰的元素,將值大的元素交換至右端。

複雜度:o(n*n)

思路:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至全部排序完成。

第一趟比較完成後,最後乙個數一定是陣列中最大的乙個數,所以第二趟比較的時候最後乙個數不參與比較;

第二趟比較完成後,倒數第二個數也一定是陣列中第二大的數,所以第三趟比較的時候最後兩個數不參與比較;

依次類推,每一趟比較次數-1;

public int bubblesort(int a, int n) }}

return a;

}2.選擇排序

原理:選擇排序是一種簡單直觀的排序演算法,其基本原理如下:對於給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第乙個記錄的位置交換;接著對不包括第乙個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換;重複該過程,知道進行比較的記錄只剩下乙個為止。

複雜度:o(n*n)

public int selectionsort(int a, int n) }}

// write code here

return a;

}3.插入排序

原理:直接插入排序的基本操作是將乙個記錄插入到已經排好的有序表中,從而得到乙個新的、記錄數增1的有序表。對於給定的一組記錄,初始時假定第乙個記錄自成乙個有序序列,其餘記錄為無序序列。接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入到其之前的有序序列中,直到最後乙個記錄插到有序序列中為止。

public int insertionsort(int a, int n) {

// write code here

for(int i=1;i=0&&temp複雜度分析:

當最好的情況,也就是要排序的表本身就是有序的,此時只有資料比較,沒有資料移動,時間複雜度為o(n)。 

當最壞的情況,即待排序的表是逆序的情況,此時需要比較次數為:2+3+…+n=(n+2)(n-1)/2 次,而記錄移動的最大值也達到了 (n+4)(n-1)/2 次. 

如果排序記錄是隨機的,那麼根據概率相同的原則,平均比較和移動次數約為次,因此,得出直接插入排序發的時間複雜度為。從這裡可以看出,同樣的是時間複雜度,直接插入排序法比冒泡和簡單選擇排序的效能要好一些。

演算法 排序之一 氣泡排序

如果資料按照一定的順序進行排序,資料處理的效率將顯著的提高。演算法是程式設計的精髓,乙個高效 而合適的演算法能極大的減少時間消耗與空間消耗,提到 合適 是因為沒有哪個演算法可以在所有情況下都表現出色,同樣是排序,在不同資料規模下各種排序演算法有不同的效能表現,選擇合適的解決演算法的才能最大限度地提高...

基本排序演算法 之一 氣泡排序

templatevoid bubblesort t arr,int len 未改進的氣泡排序,最好,最壞以及平均情況下的時間複雜度均為o n 2 排序過程可能在k k n 1 次外迴圈後已經達到有序狀態,但該演算法仍然會繼續比較相鄰元素,直到n 1次外迴圈結束。基於以上考慮,提出改進的氣泡排序演算法...

排序演算法 氣泡排序 選擇排序

1 氣泡排序 這個氣泡排序的原理就像水裡的魚吐泡泡一樣,起初是小一點的泡泡,然後越來越大,最後的最大。演算法描述 1 設待排序序列中的記錄的數為n 2 一般的,第i趟起泡排序從1到n i 1 3 依次比較相鄰兩個記錄的數字,如果發生逆序,則交換 4 其結果是這n i 1個記錄中,關鍵字最大的記錄被交...