冒泡排序的解读

冒泡排序
第一个循环
如果是从小到大排序数组长度n
第一循环得到数组最后位置(正数下标n-1)是最大。
第二次循环是数组的倒数第二个(正数下标n-2)现有最大
...
第n-1次循环的时候到了第(正数下标n-(n-1)=1)最大
那么问题来了下标为1的比0的大,那么下标0的还要排吗??
显然由上可以知道
第一个for循环了共n-1次

现在对上面的第一次循环得到数组最后的位置是最大的进行细化,假如数组的最后个下标m=(n-1)
假如:下标0的数是最大的,有
下标0个和 下标 1个进行比较,最大数到 下标 1位置上,比较了1次
下标1个和 下标2个进行比较,最大数到 下标2位置上 ,比较了2次
....
当下标m-1和 下标m进行比较,最大数到了m位置上,比较了m次(n-1)
因此第一个循环的最后的比较次数是n-1(n- 一)
第二次循环的数组比较的次数是n-2(n-二)
....
第n-1次循环的数组比较的次数是1(n-(n-1))
所以第二个for循环了n-上面的循环的次数
现在给出完整的例子
public static byte [] sortInt(){
   String str = "196851432134" ;
    byte [] bytes = str .getBytes();
    for ( int i = 1; i < bytes . length ; i ++) {
        for ( int j = 0; j < bytes . length - i ; j ++) {
           if ( bytes [ j ]< bytes [ j +1]) {
                  byte temp = bytes [ j +1];
                      bytes [ j +1]= bytes [ j ];
                      bytes [ j ]= temp ;
          }   
       }
   }
return bytes ;
}

直接选择排序
第一次循.....
第二次循环...
如上
共循环了n-1次
第一次循环细化,
把下标为0的假设为最大值,和剩下的值进行比较n-1进行比较
即是
public static byte [] showString(){
   String str = "865651353" ;
      byte [] bytes = str .getBytes();
      for ( int i = 1; i < bytes . length ; i ++) {
        int index =0;
        for ( int j = 1; j <=  bytes . length - i ; j ++) {
           if ( bytes [ j ]> bytes [ index ]) {
               index = j ;
          }
       }
        //经过上面的排序后index是下标最大的值的下标
        byte temp = bytes [ bytes . length - i ];  
        bytes [ bytes . length - i ] = bytes [ index ];
        bytes [ index ]= temp ;
       
   }
   
    return bytes ;
}


写给将来的自己,希望自己走的更远!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值