交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),插入排序(直接插入排序、希爾排序)
1.冒泡排序算法的運作如下:(從后往前)
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
java冒泡排序、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。
針對所有的元素重復以上的步驟,除了最后一個。
持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
若文件的初始狀態是正序的,冒泡排序最好的時間復雜度為 ;若初始文件是反序的,冒泡排序的最壞時間復雜度為 ,綜上,因此冒泡排序總的平均時間復雜度為 ,是一種穩定排序算法。
java list排序。public void doBubbleSort(int src[]) {
int len = src.length;
int temp;
for(int i=len-1;i>0;--i) {
選擇排序java。for(int j=0;j
if(src[j+1]
temp = src[j];
src[j] = src[j+1];
java數組排序。src[j+1] = temp;
}
}
printResult(i, src);
如何使用java排序。}
}
2.快速排序:首先在要排序的序列 a 中選取一個中軸值,而后將序列分成兩個部分,其中左邊的部分 b 中的元素均小于或者等于 中軸值,右邊的部分 c 的元素 均大于或者等于中軸值,而后通過遞歸調用快速排序的過程分別對兩個部分進行排序,最后將兩部分產生的結果合并即可得到最后的排序序列。
下面我們通過一個案例來演示一下快速排序的基本步驟: 以序列 46 30 82 90 56 17 95 15?? 共8個元素
java遞歸?初始狀態:?????46??30? 82? 90? 56? 17 ?95??15??????? 選擇46 作為基準值,i = 0, j = 7
i = 0??????????????????????????????? j = 7
15??30? 82? 90? 56? 17 ?95??46???????15 < 46, 交換 15 和 46,移動 i, i = 1
i =?1????????????????????????? ?j = 7
java實現排序算法。15??30??82? 90? 56? 17 ?95??46???????30 < 46, 不需要交換,移動 i?, i = 2
i =?2?????????????????? j = 7
15??30??46? 90? 56? 17 ?95??82??????82?> 46, 交換82 和 46,移動?j?,?j = 6
i =?2?????????????? j = 6
冒泡排序java代碼、15??30??46? 90? 56??17??95??82??????95?> 46, 不需要交換,移動?j?,?j = 5
i =?2???????? j = 5
15??30? 17??90? 56??46??95??82??????17?< 46, 交換46 和 17,移動?i,?i = 3
i =?3??? j = 5
java算法有哪些。15??30? 17??46?56??90??95??82??????90?> 46, 交換90 和 46,移動?j?,?j = 4
3 = i????j = 4
15??30? 17??46?56??90??95??82??????56?> 46, 不需要交換,移動?j?,?j = 3
i??=??j = 3
i = j = 3, 這樣序列就這樣分割成了兩部分,左邊部分{15, 30, 17} 均小于 基準值(46);右邊部分 {56, 90,95,82},均大于基準值。這樣子我們就達到了分割序列的目標。在接著對子序列用同樣的辦法進行分割,直至子序列不超過一個元素,那么排序結束,整個序列處于有序狀態。 3.直接選擇排序:
第一次從R[0]~R[n-1]中選取最小值,與R[0]交換,第二次從R[1]~R[n-1]中選取最小值,與R[1]交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列。時間復雜度為 O(n2) ,是一種不穩定的排序方法。共需要進行n-1次選擇和交換,每次選擇需要進行 n-i 次比較 (1<=i<=n-1),而每次交換最多需要3次移動,因此,總的比較次數C=(n*n - n)/2。
4.堆排序:堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質:任何一非葉節點的關鍵字不大于或者不小于其左右孩子節點的關鍵字。最壞情況下時間復雜度為nlogn。堆排序為不穩定排序,不適合記錄較少的排序。操作過程:
1)初始化堆:將R[1..n]構造為堆(每次調整都是從父節點、左孩子節點、右孩子節點三者中選擇最大者跟父節點進行交換(交換之后可能造成被交換的孩子節點不滿足堆的性質,因此每次交換之后要重新對被交換的孩子節點進行調整));
2)將當前無序區的堆頂元素R[1]同該區間的最后一個記錄交換,然后將新的無序區調整為新的堆。
5.直接插入排序:數組分為有序區(初始化為一個元素)和無序區,每次從無序區找一個數插入到有序區并保證其仍有序,輔助空間復雜度S(n)=O(1)。是一個就地排序。是一個穩定的排序方法。
6.希爾排序:增量的取值規則為第一次取總長度的一半,第二次取一半的一半,依次累推直到1為止
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态