編程基礎之Java語言實現冒泡排序

編程基礎之Java語言實現冒泡排序

長沙牛耳教育      2022-03-27 08:30:01     8

編程基礎之Java語言實現冒泡排序,冒泡排序:算法重復走訪要排序的數列,一次比較兩個元素,如果它們順序錯誤就交換它們的位置,這樣最大的數就到了最后,重復操作

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

冒泡排序:

算法重復走訪要排序的數列,一次比較兩個元素,如果它們順序錯誤就交換它們的位置,這樣最大的數就到了最后,重復操作即可得到有序數列。

冒泡排序算法運行:

1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。

3. 針對所有的元素重復以上的步驟,除了最后一個。

4. 持續(xù)每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

代碼實現:  

public?static?void?main(String[]?args)?{????????int[]?values?=?{?3,?1,?6,?2,?9,?0,?7,?4,?5,?8?};????????bubbleSort(values);????????System.out.println(Arrays.toString(values));????}????public?static?void?bubbleSort(int[]?values)?{????????int?temp;????????for?(int?i?=?0;?i?<?values.length;?i++)?{????????????for?(int?j?=?0;?j?<?values.length?-?1?-?i;?j++)?{????????//減i原因:內層循環(huán),每循環(huán)完一趟就在數組末產生一個最大數,即最大數就不用比較了。????????????????if?(values[j]?>?values[j?+?1])?{????????????????????temp?=?values[j];????????????????????values[j]?=?values[j?+?1];????????????????????values[j?+?1]?=?temp;????????????????}????????????}????????}????}

但是上述代碼存在不足之處,優(yōu)化如下:

冒泡排序的優(yōu)化算法

基于冒泡排序的以下特點:(幫助理解)

1.整個數列分成兩部分:前面是無序數列,后面是有序數列。

2.初始狀態(tài)下,整個數列都是無序的,有序數列是空。

3.每一趟循環(huán)可以讓無序數列中最大數排到最后,(也就是說有序數列的元素個數增加1),也就是不用再去顧及有序序列。

4.每一趟循環(huán)都從數列的第一個元素開始進行比較,依次比較相鄰的兩個元素,比較到無序數列的末尾即可(而不是數列的末尾);如果前一個大于后一個,交換。

5.判斷每一趟是否發(fā)生了數組元素的交換,如果沒有發(fā)生,則說明此時數組已經有序,無需再進行后續(xù)趟數的比較了。此時可以中止比較。

  
??public?static?void?bubbleSort(int[]?values)?{????????int?temp;????????int?i;????????//?外層循環(huán):n個元素排序,則至多需要n-1趟循環(huán)????????for?(i?=?0;?i?<?values.length?-?1;?i++)?{????????????//?定義一個布爾類型的變量,標記數組是否已達到有序狀態(tài)????????????boolean?flag?=?true;????????????????for?(int?j?=?0;?j?<?values.length?-?1?-?i;?j++)?{????????????????//?如果前一個元素大于后一個元素,則交換兩元素的值;????????????????if?(values[j]?>?values[j?+?1])?{????????????????????temp?=?values[j];????????????????????values[j]?=?values[j?+?1];????????????????????values[j?+?1]?=?temp;???????????????????????//本趟發(fā)生了交換,表明該數組在本趟處于無序狀態(tài),需要繼續(xù)比較;????????????????????????即本躺只要發(fā)生了一次交換,就false????????????????????flag?=?false;????????????????}????????????}???????????//根據標記量的值判斷數組是否有序,如果有序,則退出;無序,則繼續(xù)循環(huán)。????????????if?(flag)?{????????????????break;????????????}????????}????}

以上就是長沙牛耳教育java培訓機構的小編針對“編程基礎Java字符串轉輸入流”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。

培訓啦提醒您:交易時請核實對方資質,對于過大宣傳或承諾需謹慎!任何要求預付定金、匯款等方式均存在風險,謹防上當。