中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

java冒泡排序原理代碼,java冒泡排序代碼及解釋

各位大神!?。∏驤AVA簡(jiǎn)單的冒泡排序法的代碼解析。小生在此膜拜!?。?/h2>

/*

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了滎陽(yáng)免費(fèi)建站歡迎大家使用!

首先我們要先了解冒泡排序的原理!

冒泡排序:

每一輪選擇兩個(gè)相鄰數(shù)據(jù)進(jìn)行比較,滿足條件交換位置,每一輪確定一個(gè)數(shù)的最終位置(這里我們假設(shè)從小到大排,那么每輪就是確定最大一個(gè)數(shù)的位置)

*/

public static void maoPao(int []arr)

{

//外層循環(huán),控制比較的輪數(shù)。arr.length-1:比較的輪數(shù)永遠(yuǎn)比數(shù)組的長(zhǎng)度少1(例如,3個(gè)數(shù)我們比較兩次就能知道最大值是誰(shuí),4個(gè)數(shù)比較3次,5個(gè)四次,以此類推)

for(int i=0;iarr.length-1;i++)

? ?{

//內(nèi)層循環(huán)控制每一輪比較的次數(shù)。arr.length-1-i:下一輪比較次數(shù)比上一輪少1(通過分析我們不難得出,第一輪比較arr.length-1次(此時(shí)i=0),第二輪比較arr.length-1-1(此時(shí)i=1),一次類推,每輪減少比較的次數(shù)正好就是i的值,所以內(nèi)層循環(huán)比較次數(shù)為arr.length-1-i)

for(int j=0;jarr.length-1-i;j++)

{

? ?//相鄰的兩個(gè)元素進(jìn)行比較,滿足條件交換位置

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

{

int temp = arr[j];

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

arr[j+1] = temp;

}

}

??}

}

/*

下邊是一張比較圖,對(duì)數(shù)組[34,456,67,78,34,23,67]進(jìn)行冒泡排序

第一輪,通過比較,相鄰交換,我們確定了最大值456的位置,那么第二輪456就不用再參與比較了;

以此類推,最后一輪正好比較第一個(gè)和第二個(gè)的位置,這樣就最終確定了整個(gè)數(shù)組元素的大小順序。

而這個(gè)比較過程就像在水中放一堆小球,越重的就越靠近水底,越輕的就越靠近水面一樣,整個(gè)過程交換并排序的過程就像是水中的氣泡從底向上溢的過程,所以稱作冒泡排序。

最后,總結(jié)一點(diǎn),所有涉及for循環(huán)排序的題目,都記住一句話:外層循環(huán)控制比較輪數(shù)(所有元素比較一遍,稱為一輪),內(nèi)層循環(huán)控每輪比較的次數(shù)。我們所要做的就是建立好外層循環(huán)和內(nèi)層循環(huán)之間的關(guān)系(就像這里的i一樣,內(nèi)外層循環(huán)共用了,但它在內(nèi)外層循環(huán)的作用是不一樣的)

JAVA 冒泡排序法的詳細(xì)解釋是什么?

冒泡排序的英文Bubble Sort,是一種最基礎(chǔ)的交換排序。

大家一定都喝過汽水,汽水中常常有許多小小的氣泡,嘩啦嘩啦飄到上面來(lái)。這是因?yàn)榻M成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點(diǎn)一點(diǎn)向上浮動(dòng)。而我們的冒泡排序之所以叫做冒泡排序,正是因?yàn)檫@種排序算法的每一個(gè)元素都可以像小氣泡一樣,根據(jù)自身大小,一點(diǎn)一點(diǎn)向著數(shù)組的一側(cè)移動(dòng)。

冒泡排序算法的原理如下:

比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。

對(duì)每一對(duì)相鄰元素做同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。

針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。

持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

具體如何來(lái)移動(dòng)呢?讓我們來(lái)看一個(gè)栗子:

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

有8個(gè)數(shù)組成一個(gè)無(wú)序數(shù)列:5,8,6,3,9,2,1,7,希望從小到大排序。按照冒泡排序的思想,我們要把相鄰的元素兩兩比較,根據(jù)大小來(lái)交換元素的位置,過程如下:

首先讓5和8比較,發(fā)現(xiàn)5比8要小,因此元素位置不變。

接下來(lái)讓8和6比較,發(fā)現(xiàn)8比6要大,所以8和6交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

繼續(xù)讓8和3比較,發(fā)現(xiàn)8比3要大,所以8和3交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

繼續(xù)讓8和9比較,發(fā)現(xiàn)8比9要小,所以元素位置不變。

接下來(lái)讓9和2比較,發(fā)現(xiàn)9比2要大,所以9和2交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

接下來(lái)讓9和1比較,發(fā)現(xiàn)9比1要大,所以9和1交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

最后讓9和7比較,發(fā)現(xiàn)9比7要大,所以9和7交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

這樣一來(lái),元素9作為數(shù)列的最大元素,就像是汽水里的小氣泡一樣漂啊漂,漂到了最右側(cè)。

這時(shí)候,我們的冒泡排序的第一輪結(jié)束了。數(shù)列最右側(cè)的元素9可以認(rèn)為是一個(gè)有序區(qū)域,有序區(qū)域目前只有一個(gè)元素。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

下面,讓我們來(lái)進(jìn)行第二輪排序:

首先讓5和6比較,發(fā)現(xiàn)5比6要小,因此元素位置不變。

接下來(lái)讓6和3比較,發(fā)現(xiàn)6比3要大,所以6和3交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

繼續(xù)讓6和8比較,發(fā)現(xiàn)6比8要小,因此元素位置不變。

接下來(lái)讓8和2比較,發(fā)現(xiàn)8比2要大,所以8和2交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

接下來(lái)讓8和1比較,發(fā)現(xiàn)8比1要大,所以8和1交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

繼續(xù)讓8和7比較,發(fā)現(xiàn)8比7要大,所以8和7交換位置。

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

第二輪排序結(jié)束后,我們數(shù)列右側(cè)的有序區(qū)有了兩個(gè)元素,順序如下:

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

至于后續(xù)的交換細(xì)節(jié),我們這里就不詳細(xì)描述了,第三輪過后的狀態(tài)如下:

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

第四輪過后狀態(tài)如下:

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

第五輪過后狀態(tài)如下:

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

第六輪過后狀態(tài)如下:

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

第七輪過后狀態(tài)如下(已經(jīng)是有序了,所以沒有改變):

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

第八輪過后狀態(tài)如下(同樣沒有改變):

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

到此為止,所有元素都是有序的了,這就是冒泡排序的整體思路。

原始的冒泡排序是穩(wěn)定排序。由于該排序算法的每一輪要遍歷所有元素,輪轉(zhuǎn)的次數(shù)和元素?cái)?shù)量相當(dāng),所以時(shí)間復(fù)雜度是O(N^2) 。

冒泡排序代碼

請(qǐng)點(diǎn)擊輸入圖片描述

請(qǐng)點(diǎn)擊輸入圖片描述

希望對(duì)您有所幫助!~

冒泡排序如何使用Java語(yǔ)言完成?

冒泡排序的原理:

從第一個(gè)元素開始,將相鄰的兩個(gè)元素依次進(jìn)行比較,直到最后兩個(gè)元素完成比較。如果前一個(gè)元素比后一個(gè)元素大,則交換它們的位置。整個(gè)過程完成后最后一個(gè)元素就是最大值,完成第一輪比較,后邊通過for循環(huán)依次完成后續(xù)比較。

運(yùn)行代碼如下:

package day01;

public class 冒泡 {

public static void main(String[] args) {

int []arr=new int[] {12,45,33,46,3};

System.out.println("排序之前的元素順序:");

for(int i=0;iarr.length;i++)

{

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

}

int t;

for(int j=0;jarr.length-1;j++)

{

for(int x=0;xarr.length-1;x++)

{

if(arr[x]arr[x+1])

{

t=arr[x];

arr[x]=arr[x+1];

arr[x+1]=t;

}

}

}

System.out.println();

System.out.println("排序之后的元素順序:");

for(int k=0;karr.length;k++)

{

System.out.print(arr[k]+" ");

}

}

}

運(yùn)行結(jié)果截圖:

擴(kuò)展資料:

(1)冒泡排序每一輪把一個(gè)最大的元素放在數(shù)組的最后

(2)如果想要實(shí)現(xiàn)倒敘比較輸出可以把代碼判斷大小的部分改為下邊代碼即可。

if(arr[x]arr[x+1])

{

t=arr[x];

arr[x]=arr[x+1];

arr[x+1]=t;

}

(3)使用知識(shí)點(diǎn):數(shù)組length的使用,數(shù)組的定義,for循環(huán)的嵌套。

Java冒泡排序的原理?

冒泡排序是所欲排序算法里最好理解的了。

1、排序算法:

A)比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。

B)對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。

C)針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。

D)持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

2、給你一個(gè)java的實(shí)現(xiàn)代碼:

public class BubbleSort{

public static void main(String[] args){

? ?int score[] = {67, 69, 75, 87, 89, 90, 99, 100};

? ?for (int i = 0; i score.length -1; i++){ //最多做n-1趟排序

? ? ? ?for(int j = 0 ;j score.length - i - 1; j++){ //對(duì)當(dāng)前無(wú)序區(qū)間score[0......length-i-1]進(jìn)行排序(j的范圍很關(guān)鍵,這個(gè)范圍是在逐步縮小的)

? ? ? ? ? ?if(score[j] score[j + 1]){ //把小的值交換到后面

? ? ? ? ? ? ? ?int temp = score[j];

? ? ? ? ? ? ? ?score[j] = score[j + 1];

? ? ? ? ? ? ? ?score[j + 1] = temp;

? ? ? ? ? ?}

? ? ? ?}

? ? ? ?System.out.print("第" + (i + 1) + "次排序結(jié)果:");

? ? ? ?for(int a = 0; a score.length; a++){

? ? ? ? ? ?System.out.print(score[a] + "\t");

? ? ? ?}

? ? ? ?System.out.println("");

? ?}

? ? ? ?System.out.print("最終排序結(jié)果:");

? ? ? ?for(int a = 0; a score.length; a++){

? ? ? ? ? ?System.out.print(score[a] + "\t");

? }

}

}

求冒泡排序的java代碼

方法一:

package

basic.javastu;

public

class

NumberTest

{

/**

*

實(shí)現(xiàn)冒泡程序1

*/

public

static

void

main(String[]

args)

{

//

TODO

Auto-generated

method

stub

int[]

numb=new

int[]{3,42,57,1,32,24};

int

len=numb.length;

int

i,j;

int

temp;

System.out.println("排序前的數(shù)組各個(gè)值:");

for(i=0;ilen;i++)

{

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

}

System.out.println("\n");

for(i=1;i=len;i++)

{

for(j=len-1;j=1;j--)

{

if(numb[j]numb[j-1])

{

temp=numb[j];

numb[j]=numb[j-1];

numb[j-1]=temp;

}

}

}

System.out.println("排序后的數(shù)組各個(gè)值:");

for(i=0;ilen;i++)

{

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

}

}

}

方法二:

package

basic.javastu;

public

class

NumberTest2

{

/**

*

實(shí)現(xiàn)冒泡程序2

*/

public

static

void

main(String[]

args)

{

//

TODO

Auto-generated

method

stub

int[]

numb=new

int[]{3,42,57,1,32,24};

int

leng=numb.length;

System.out.println("排序前的數(shù)組各個(gè)值:");

for(int

i=0;ileng;i++)

{

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

}

System.out.println("\n");

swap(numb);

System.out.println("數(shù)組排序后:");

for(int

i=0;ileng;i++)

{

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

}

}

private

static

int[]

swap(int[]

numb)

{

int

n2[]=numb;

int

len=n2.length;

int

i,j;

int

temp;

for(i=1;i=len;i++)

{

for(j=len-1;j=1;j--)

{

if(n2[j]n2[j-1])

{

temp=n2[j];

n2[j]=n2[j-1];

n2[j-1]=temp;

}

}

}

return

n2;

}

}

方法三:

package

basic.javastu;

public

class

NumberTest3

{

/**

*

實(shí)現(xiàn)冒泡程序2

*/

public

static

void

main(String[]

args)

{

//

TODO

Auto-generated

method

stub

int[]

numb=new

int[]{3,42,57,1,32,24};

int

leng=numb.length;

System.out.println("排序前的數(shù)組各個(gè)值:");

for(int

i=0;ileng;i++)

{

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

}

System.out.println("\n");

swap(numb);

System.out.println("數(shù)組排序后:");

for(int

i=0;ileng;i++)

{

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

}

}

private

static

void

swap(int[]

numb)

{

int

len=numb.length;

int

i,j;

int

temp;

for(i=1;i=len;i++)

{

for(j=len-1;j=1;j--)

{

if(numb[j]numb[j-1])

{

temp=numb[j];

numb[j]=numb[j-1];

numb[j-1]=temp;

}

}

}

}

}

分享題目:java冒泡排序原理代碼,java冒泡排序代碼及解釋
標(biāo)題路徑:http://www.rwnh.cn/article26/dsijojg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、小程序開發(fā)軟件開發(fā)、虛擬主機(jī)、電子商務(wù)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)
康乐县| 神池县| 元朗区| 富顺县| 驻马店市| 云和县| 西青区| 丹寨县| 巴中市| 丹凤县| 灵丘县| 台江县| 四子王旗| 乌审旗| 潮安县| 玛纳斯县| 迁安市| 四平市| 贡山| 措美县| 洮南市| 怀柔区| 新沂市| 黔南| 长沙县| 清丰县| 辉南县| 高安市| 保山市| 安庆市| 虞城县| 新巴尔虎右旗| 庄河市| 博兴县| 萨迦县| 大名县| 镇巴县| 阳谷县| 呈贡县| 临湘市| 绵竹市|