冒泡排序

来源:互联网 发布:冰点还原精灵软件 编辑:程序博客网 时间:2024/05/13 18:37

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
算法原理
前一个元素比后一个元素大,就交换他们的位置,大的元素排后面,升序,前一个元素比后一个元素小,就叫唤他们位置,小的排后面,这就是降序。
算法分析:例如int[] arr={9,8,7,6,5}让按升序排列
第一趟第一次 {8,9,7,6,5} 9与8交换
第一趟第二次{8,7,9,6,5} 9与7交换
第一趟第三次{8,7,6,9,5}9与6交换
第一趟第四次{8,7,6,5,9}9与5交换
第二趟第一次{7,8,6,5,9}8月7交换
第二趟第二次{7,6,8,5,9}8与6交换
第二趟第三次{7,6,5,8,9}8与5交换
第三趟第一次{6,7,5,8,9}7与6交换
第三趟第二次{6,5,7,8,9}7与5交换
第四趟第一次{5,6,7,8,9}5与6交换
没交换一趟就少遍历一次
5个数,交换4趟
for(int i=0 ; i < arr.leng -1 ; i++){

for( int  j = 0;j < arr.length-1-i;j++){    if(arr[j]>arr[j+1]){        int temp=arr[j];        arr[j]=arr[j+1];        arr[j+1]=temp;    }}

}
这种方式是遍历最多次数的,有些还可以简化下的,例如:
int arr[]={7,4,5,6,8};
第一趟第一次{4,7,5,6,8} 7与4交换
第一趟第二次{4,5,7,6,8}7月5交换
第一趟第三次{4,5,6,7,8}7月6交换
第一趟第四次{4,5,6,7,8}不用交换
第二趟不用交换了,前面已经排过序了
boolean flag=true;

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

    for(int j=0;j<arr.length-1-i&&flag;j++){        flag=false;        if(arr[j]>arr[j+1]){            int temp=arr[j];            arr[j]=arr[j+1];            arr[j+1]=temp;            flag=true;         }    }

}
如果后面有一趟没发生交换,那么循环就结束。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 win10电脑没有网络图标怎么办 电脑开机桌面什么都没有怎么办 xp桌面什么都没有了怎么办 手机下滑通知栏不见了怎么办 跑800米赶上月经怎么办 强迫症吃药没效怎么办 复读生档案丢了怎么办 大学退学重新高考学籍怎么办 玻尿酸鼻子宽了怎么办 被昆山市圆通快递公司骗怎么办 借壳上市后壳公司怎么办 盐城国有民办学校倒闭教师怎么办 联想复印机显示更换墨粉盒怎么办 襄垣县共公自行车卡怎么办 转南京江宁户口怎么办儿童医保 剑与家园鬼服怎么办 花生苗出现虫洞怎么办 被蝎子草扎到手怎么办 被蝎子草蛰了怎么办 螫麻子草扎了怎么办 苹果app没删除干净怎么办 字写的太潦草看不懂怎么办 肝内胆管结石疼怎么办 肝内胆管有结石怎么办 肝里胆管有结石怎么办 被信任的人算计你怎么办 卡罗拉1.8油耗高怎么办 请问09年途锐柴油版怎么办 油电混合没电了怎么办 前向运动精子3%怎么办 精子活力正常精子活率低怎么办? 精子形态正常率低怎么办 前向运动精子20%怎么办 不运动精子率高怎么办 前向运动精子少怎么办 精子前向运动力低怎么办 精子异常形态率高怎么办 精子正常率才1%怎么办 精子头部缺陷率高怎么办 前向运动精子15%怎么办 精子向前运动力低怎么办