五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

冒泡排序

2022-11-11 14:41 作者:酸奶公園  | 我要投稿


冒泡排序(Bubble Sort)的基本思想是:通過對排序序列從前向后(從下標較小的元素開始)依次比較相鄰元素的值,若發(fā)現(xiàn)逆序則交換,使得值比較大的元素逐漸從前向后移動,就像水底下的氣泡一樣逐漸向上冒。

假設排升序:

將數(shù)組中相鄰元素從前往后依次進行比較,如果前一個元素比后一個元素大,則交換,一趟下來后最大元素就在數(shù)組的末尾。

依次從上上述過程,直到數(shù)組中所有的元素都排列好。

依據(jù)這個思想,我們很容易寫出如下代碼:

package shujvjiegou;

//歡迎來到酸奶公園

//最好自己先思考一下,不然很快忘記的。代碼問題盡管q我3095563063知無不言

public class maopaopaixu {

? ? public static void main(String []args) {

int[] arr = {10,5,3,7,6};

System.out.println("arr的排序前:\n10? 5? 3? 7? 6");

int temp? = 0 ;

for(int i = 0 ;i< arr.length -1; i++){

for(int j = 0; j<arr.length-1-i; j++){

if(arr[j]>arr[j+1]){

temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

System.out.println("arr排序后:");

? ? ? ? for(int i = 0; i<arr.length; i++){

?

System.out.print(arr[i]+"\t");

}

? ? ??

? ? }

}

代碼實現(xiàn)過程:

?上述代碼在我們思路清晰的情況下很容易寫出,但是代碼是如何實現(xiàn)的呢?

在這里我們主要關注兩個點:趟數(shù)i和每次循環(huán)的次數(shù)j。

第1趟:i = 0時

? ? ? ? 當j = 0時,此時array[0] = 10; array[1] = 5;10 > 5,所以執(zhí)行array[j] = array[j+1]的交換代碼(這里交換代碼簡寫,下同),數(shù)組變?yōu)椋簕5,10,3,7,6};


? ? ? ? 當j = 1時,此時array[1] = 10; array[2] = 3;10 > 3,所以執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組變?yōu)閧5,3,10,7,6};


? ? ? ? 當j = 2時,此時array[2] = 10; array[3] = 7;10>7,所以執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組變?yōu)閧5,3,7,10,6};


? ? ? ? 當j = 3時,此時array[3] = 10; array[4] = 6;10>6,所以執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組變?yōu)閧5,3,7,6,10};


? ? ? ? 至此第1趟的內(nèi)部循環(huán)結(jié)束,我們將10這個數(shù)字排列到數(shù)組的末尾,此時j循環(huán)了4次,j = 3時停止。


? ? ? ? 我們發(fā)現(xiàn),數(shù)組中一共有5個元素,j循環(huán)了4次,那么第一個循環(huán)條件就是j <array.length - 1;如果不-1的話,j = 4的時候,那么array[j+1]就會越界,因為數(shù)組的下標就到4。 所以array.length - 1,是否就有一個條件呢?,答案是否定的(可以做代碼優(yōu)化),我們繼續(xù)向下執(zhí)行第2趟。




?第2趟:i = 1時

? ? ? ? 當j = 0時,此時數(shù)組是上一趟結(jié)束的數(shù)組{5,3,7,6,10},此時array[0] = 5; array[1] = 3;5 > 3,所以執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組變?yōu)椋簕3,5,7,6,10};


? ? ? ? 當j = 1時,此時array[1] = 5; array[2] = 7;5 < 7,所以不執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組還是{3,5,7,6,10};


? ? ? ? 當j = 2時,此時array[2] = 7; array[3] = 6;7 > 6,所以執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組變?yōu)閧3,5,6,7,10};


? ? ? ? 至此第2趟代碼就執(zhí)行完交換了,因為當j = 3的時候,我們比較的是7和10的大小,在第一趟的時候,我們就已經(jīng)操作完10到數(shù)組的末尾了,所以沒必要再比較一次。


? ? ? ? ?在第2趟中我們將7操作到倒數(shù)第二位的指定位置,我們發(fā)現(xiàn)內(nèi)部循環(huán)j執(zhí)行了3次,到j = 2時候停止。 其實到第2趟的時候我們已經(jīng)排序完成了,但是代碼不知道這個事情(這點記下來,可以做代碼優(yōu)化),我們接著執(zhí)行第3趟




?第3趟:i = 2時

? ? ? ? 當j = 0時,此時數(shù)組是上一趟結(jié)束的數(shù)組{3,5,6,7,10},此時array[0] = 3; array[1] = 5;3 < 5,所以不執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組還是{3,5,6,7,10}。


? ? ? ? ?當j = 1時,此時array[1] = 5; array[2] = 6;5 < 6,所以不執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組還是{3,5,6,7,10}。


? ? ? ? ?至此第3趟的內(nèi)部循環(huán)就結(jié)束了,因為如果再往下執(zhí)行,就要操作7了,但是7我們在第2趟的時候已經(jīng)操作過了。


? ? ? ? ?在第3趟的內(nèi)部循環(huán)中,是操作了6在倒數(shù)第3位的位置,我們發(fā)現(xiàn)內(nèi)部循環(huán)j執(zhí)行了2次,到j = 1時候停止。 數(shù)據(jù)早就排序好了,但是代碼不知道,所以繼續(xù)第4趟。




第4趟,i = 3時

? ? ? ? 當j = 0時,此時數(shù)組是上一趟結(jié)束的數(shù)組{3,5,6,7,10},此時array[0] = 3; array[1] = 5;3 < 5,所以不執(zhí)行array[j] = array[j+1]的交換代碼,數(shù)組還是{3,5,6,7,10}。


? ? ? ? 至此第4趟結(jié)束了,因為我們要操作的是5這個數(shù)字,和3比較完之后,就已經(jīng)在原來正確的位置了,所以循環(huán)結(jié)束。


? ? ? ? 在第4趟的內(nèi)部循環(huán)中,是操作了5在倒數(shù)第4位的位置,我們發(fā)現(xiàn)內(nèi)部循環(huán)j執(zhí)行了1次,到j = 0時候停止。


? ? ? ? ?


冒泡排序的評論 (共 條)

分享到微博請遵守國家法律
渭源县| 若尔盖县| 汉中市| 克什克腾旗| 琼海市| 福海县| 镇坪县| 巩留县| 饶阳县| 新竹市| 马尔康县| 大方县| 太康县| 临邑县| 万安县| 延寿县| 寿阳县| 喀什市| 桃源县| 方正县| 兰考县| 曲沃县| 红河县| 景德镇市| 多伦县| 汉阴县| 资源县| 土默特右旗| 蕲春县| 灵丘县| 四会市| 广灵县| 长海县| 金沙县| 弥渡县| 广饶县| 宜良县| 万全县| 余干县| 江达县| 临汾市|