选择排序和冒泡排序

    之前看算法书的时候对冒泡排序和选择排序有点混淆,它们都是使用双层循环,都存在数据交换.

在阳光明媚的一天,我高高兴兴的打开了我的<<算法图解>>,突然发现大哭选择排序和冒泡排序是

什么鬼,怎么看着都一样,可能是我太久没有用了吧.

①选择排序

 

for (int i = 0; i < arr.length-1; i++) {                   // i 循环的次数:length-1, 
举个栗子: 3,2,1 进行选择排序:                                                                    
第一次内层循环结束的结果是: 1,3,2 
第二次内层循环结束时结果是: 1,2,3		
 此时就已经得出正确的排序结果, 无需再进行第三次的内层循环	                                             
 	for (int j = i; j < arr.length; j++) {             // 内层循环从i 开始进行比较, 因为 i 之前的元素已经完成了排序
		if(arr[i] > arr[j]){                       // 此处是选择排序和冒泡排序的核心区别(我是这么认为的-->或者说是我瞎掰的)                              
//整个if语句块是为了找出需要排序的元素中的最小值,并进行交换
			int temp = arr[j];
			arr[j] = arr[i];
			arr[i] = temp;
		}
	}			
}

 

 

 

②冒泡排序

 

  for(int i = 0 ; i < arr.length-1 ; i++){              // 此处和选择排序中的栗子原理相同
      for(int j = 0 ; j < arr.length-1-i ; j++){        // -1是防止索引越界(因为内层循环中的if语句块中存在 arr[j+1])  -i是为了提高效率
          if(arr[j] >= arr[j+1]){                       // 相邻两个元素之间进行比较     ( 此处是选择排序和冒泡排序的核心区别 )
      //if 语句块每次比较的是相邻的两个元素之间的比较,并进行交换
             int temp = arr[j];
             arr[j] = arr[j+1];
             arr[j+1] = temp;
          }
      }
  }

    折腾了这么久,我觉得我已经饿了, 将就着看吧. 要是有错误或者建议大家可以提出。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值