java 氣泡排序 選擇排序 插入排序 希爾排序

2021-09-22 02:01:16 字數 1878 閱讀 2217

最壞均時間複雜度o(n^2)    ---整個陣列都是逆序的情況

最好情況o(n)   -----整個陣列都已經是順序的情況(對應version3,version1、2不是)

public static void main(string arg) 

}} //小到大 -----version 2

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

}} //小到大 -----version 3

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

}if(!haschanged) break;

} //格式化輸出

formatter fmt=new formatter(system.out);

for(int num:data)

fmt.format("%d ", num);

}

public static void main(string arg) 

}} //格式化輸出

formatter fmt=new formatter(system.out);

for(int num:data)

fmt.format("%d ", num);

}

最差情況o(n^2)

最好情況o(n)

這種排序就像插撲克牌一樣,把前面的序列做有手中已經有序的撲克牌,後面的是你要摸的牌,每次新增一張牌,一直到摸完。

初次見這個排序還是兩年前……當時覺得還挺難的……

巢狀的for裡面加了data[j-1]>now這個條件。

裡面的for在尋找新來的「牌」需要插入的位置,一邊找一邊向後挪資料,空出前面的乙個位置。tricky的地方是,可以直接覆蓋資料。我可以直接空出來乙個位置,儘管這個位置上還是有資料,我用插進來的資料覆蓋掉之前的資料就可以了。

為什麼要從有序陣列的後面開始移動資料呢?   你說呢?想想也是……前面的怎麼向前移……

(當然你也可以用後面的做有序的陣列,從前面找數插入後面,那樣子就是反過來從前面移動資料)

public static void main(string arg) 

//格式化輸出

formatter fmt=new formatter(system.out);

for(int num:data)

fmt.format("%d ", num);

}

這兩種排序元素交換的次數必定一樣。

因為決定這個的,是陣列中逆序對的個數。每一次元素交換,都會消掉乙個逆序對。

這樣子,我們可以把這兩種演算法用在  基本有序 的資料中, 非常簡單,而且高效。

另外,他們的共同特點是依靠交換相鄰2元素消除逆序對來排序,而任何僅僅靠交換相鄰2元素的排序演算法的平均複雜度最好是o(n^2).

那麼能不能一次不是消掉兩個相鄰的逆序對呢?

在插入排序的基礎上,會先做幾次d間隔的插入排序。

舉個例子,我先做一次7間隔的插入排序(一次排序先排7、14、21...再排1、8、15……一直排到6、13……)

再做一次5間隔的插入排序

再3間隔

最後到1間隔

為什麼要這樣做呢?

1.「插入排序演算法用在  基本有序 的資料中, 非常簡單,而且高效。」

2.在d減小的過程中,大間隔排過的有序在小間隔中仍然有序。

有一點注意,不互質的間隔是不起作用的,8間隔之後4間隔就不起作用了。所以,間隔的取法也有講究。有很多間隔的序列,具體不說了。

這種演算法時間複雜度還在討論中。 要不然你來分析一下?哈哈

稍微高階一點的排序

複雜度o(nlogn)

雖說理論這樣,但是資料量大了之後實際應用起來效果不如希爾排序。

複雜度o(nlogn)

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

一 前言 排序是日常中最常見的一種演算法,常見的演算法有 氣泡排序 插入排序 選擇排序 歸併排序 快速排序 計數排序 快速排序 基數排序 桶排序。那麼該怎樣分析和學習排序演算法呢?二 演算法的分析課 在上述的八種排序方法中,根據時間複雜度和是否基於比較可以為三種 排序演算法 時間複雜度 是否基於比較...

java排序演算法 氣泡排序 選擇排序 插入排序

氣泡排序 原理 是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣一趟過去後,最大或最小的數字被交換到了最後一位,然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束 author daopinz public class bubblesort system.out.printl...

Java排序 氣泡排序 插入排序和選擇排序

插入排序 1 特殊 從第二個元素開始,和第乙個元素比較,如果滿足排序的順序,則交換順序。2 一般 把待比較和他之前的所有元素相比 從右往左 如果滿足排序的順序,這交換。private static void insertsort int arr 2 氣泡排序 1 從第乙個元素開始,和第二個元素相比,...