最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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時候停止。


? ? ? ? ?


冒泡排序的評論 (共 條)

分享到微博請遵守國家法律
酉阳| 巫溪县| 左权县| 台东市| 竹山县| 外汇| 太保市| 缙云县| 南京市| 绥化市| 巴里| 左贡县| 手游| 朝阳县| 太和县| 乡宁县| 梨树县| 丹江口市| 三台县| 独山县| 刚察县| 金塔县| 青海省| 怀仁县| 闽清县| 定结县| 临夏市| 芒康县| 陆川县| 东阿县| 上杭县| 黄大仙区| 荔波县| 崇左市| 偃师市| 杨浦区| 广宁县| 蚌埠市| 宁南县| 花垣县| 沈阳市|