冒泡排序:
1)比較相鄰的元素,如果違反最后的升序準則,則交換,
2)可以簡化理解為:
第一次,找到所有元素中最大的放在最后一個位置,不再變動
第二次,找到剩余所有元素中最大的放在倒數第二位上,不再變動
以此類推,直到只剩一個元素時不再比較
3)比較時可以采用"下沉"的方式,也可以采用“上浮”的方式實作,
排序的程序分析:
int[] arr = {1,5,9,4};//升序
第一輪把9放到arr[3]上
1和5比,不換,{1,5,9,4}
5和9比,不換,{1,5,9,4}
9和4比,換,{1,5,4,9}-------9到達指定位置
第二輪把5放到arr[2]上
1和5比,不換,{1,5,4,9}
5和4比,換,{1,4,5,9}-------5到達指定位置
第三輪把4放到arr[1]上
1和4比,不換,{1,4,5,9}-----4到達指定位置
舉例:
就像十個人抽10個球,到最后一個人抽的時候還用再抽么?
不用了,因為就剩下一個球了
特點:
5.1)arr.length個元素比較時只需比較arr.length-1輪
5.2)每輪比較都從第一個元素開始比
每一次都是和它的下一個元素比
5.3) 已經排好的數就不再進入對比中了
代碼實作:
int[] bubble = new int[10];
// 給每個元素賦值1-100之間的亂數
for(int i=0;i<bubble.length;i++){
bubble[i] = (int)(Math.random()*100);
}
for(int i=0;i<bubble.length-1;i++){//控制輪數
for(int j=0;j<bubble.length-1-i;j++){//控制對比次數
if(bubble[j]>bubble[j+1]){//對比兩個相鄰的數
int t = bubble[j];//將較大值放入空杯子
bubble[j] = bubble[j+1];//將較小值前移
bubble[j+1] = t;//將空杯子中的較大值后移
}
}
}
//內層回圈是用來控制比較次數的,那么對比次數的范圍從何而來?
i=0(第1輪) 比3次
i=1(第2輪) 比2次
i=2(第3輪) 比1次
//從中可以發現每輪i的值和比較次數相加就是比較的輪數,
//同理比較的輪數減去i就是比較的次數了,用代碼的實作:bubble.length-1-i
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266984.html
標籤:其他
上一篇:[藍橋杯]地宮取寶
