3種簡單排序演算法 冒泡,選擇,插入排序

2021-07-27 21:52:14 字數 1756 閱讀 5433

1.氣泡排序

就是從最左邊開始,重複地訪問要排序的數列,一次比較兩個元素,如果他們的順序錯誤,就把他們交換。通過一次次的比較,越大的元素會通過交換慢慢「浮」到數列的頂端,故名「冒泡」。是穩定的排序演算法。

實現:

1.常規實現

public

class bubblesort ;

//臨時儲存資料

int temp = 0;

for (int i = 0; i < target.length; i++) }}

for (int i = 0; i < target.length; i++)

}}

我們可以看到上面其實有一部分迴圈是多餘的,為什麼呢?因為每一趟冒泡下來,其實後面的順序已經排好了,所以我們不需要再對他們進行重複判斷,所以外層迴圈從陣列的最後開始,這裡每一次迴圈下來,外層迴圈就減1,因為後面的已經排好序了。

2.優化實現如下:

public

class bubblesort ;

//臨時儲存資料

int temp = 0;

//優化後

for (int i = target.length-1; i > 1; i--) }}

for (int i = 0; i < target.length; i++)

}}

氣泡排序時間複雜度是:o(n²)

2.選擇排序

public

class

selectsort ;

int temp = 0;

//暫存最小值的索引

intindex;

for (int i = 0; i < target.length; i++)

}//交換

temp = target[index];

target[index] = target[i];

target[i] = temp;

}for (int i = 0; i < target.length; i++)

}}

選擇排序時間複雜度是:o(n²)

3.插入排序

將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序。是穩定的排序方法。

插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外(讓陣列多乙個空間才有插入的位置),而第二部分就只包含這乙個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。

實現:

public

class

insertsort ;

//暫存待插資料

int temp = 0;

//暫存待插資料下標

intindex = 0;

//從第二個數開始,因為第乙個可以看做有序

for (int i = 1; i < target.length; i++)

target[index] = temp;

}for (int i = 0; i < target.length; i++)

}}

插入排序時間複雜度是:o(n²),但是如果資料已經基本有序或者有序的話,插入排序時間複雜度為o(n).

這裡只是比較簡單的排序演算法,適合入門學習,稍後會有更加複雜的演算法。

簡單排序(選擇 冒泡 插入)

逆序對設a aa為乙個有n nn個數字的有序集 n 1n 1 n 1 其中所有數字各不相同。如果存在正整數i ii j jj使得1 i n1 leq i j leq n 1 in而且a i a j a i a j a i a j 則 a i a j a i a j a i a j 這個有序對稱為a的...

常見簡單排序演算法(選擇,冒泡,插入)

原理 每一次從待排序的資料元素中選出最大 小 的,將其放在前面已排好序的資料後面,然後又從剩下的資料中選出最大 小 的,重複操作,以此類推。c include void main int i,j,k,temp for i 0 i 10 i temp a i 找到了就開始交換位置 a i a k a ...

簡單排序演算法 冒泡 插入 選擇

1.氣泡排序 資料兩兩比較,每次冒出乙個最大 小 值,需要n n 1 1次比較,時間複雜度o n 2 基本 void sort int arr void swap int arr,int i,int j 如果給定陣列本身已經是排好的順序,那麼優化一下以上排序 如果第一次遍歷時沒有任何數交換,那麼證明...