冒泡排序

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
算法原理
前一个元素比后一个元素大,就交换他们的位置,大的元素排后面,升序,前一个元素比后一个元素小,就叫唤他们位置,小的排后面,这就是降序。
算法分析:例如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;
         }
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值