1.插入排序
分析:插入排序是將一個元素插入到已排序好的有序表中,從而得到一個新的記錄數增加1的新的有序表,執行過程一次選出第i個元素插入到前i-1個有序元素的合適位置
代碼執行過程:
調試結果:
時間復雜度問題:
? ? ? ? 如果目標是把n個元素的序列升序排列,那么采用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那么此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序算法的時間復雜度為O(n^2)。因而,插入排序不適合對于數據量比較大的排序應用。但是,如果需要排序的數據量很小,例如,量級小于千,那么插入排序還是一個不錯的選擇。
2.冒泡排序
分析:每趟排序過程中需要通過比較找到為排序元素中最大的元素,所以我們需要一個外部循環,從數組其實開始,一次比較相鄰的兩個元素并把較大的放在右邊,保證排序的順序從小到大。
代碼執行過程:
調試結果與上邊類似。
時間復雜度問題:
3.插入排序
分析:每趟從排序的元素中找到最小的一次放到左邊,執行完一趟剛好排出正確的順序
調試結果與上邊類似。
時間復雜度:
選擇排序的時間復雜度不像前面幾種排序方法那樣,前面幾種排序方法的時間復雜度不是一眼就能看出來的,而是要通過推導計算才能得到的。一般會涉及到遞歸和完全二叉樹,所以推導也不是那么容易。但是選擇排序就不一樣了,你可以很直觀的看出選擇排序的時間復雜度:就是兩個循環消耗的時間;
比較時間:T = (n-1))+ (n -2)+(n - 3).... + 1;? ===>>? T =? [n*(n-1) ] / 2;
交換時間:最好的情況全部元素已經有序,則 交換次數為0;最差的情況,全部元素逆序,就要交換 n-1 次;
所以最優的時間復雜度? 和最差的時間復雜度? 和平均時間復雜度? 都為 :O(n^2)