Java经典算法冒泡排序&&选择排序

需求:

	数组元素:{24, 69, 80, 57, 13}			
	请对数组元素进行排序。
	排序后的结果应为:{13,24,57,69,80}
	使用冒泡排序法&&选择排序法排序

冒泡排序分析:

    冒泡排序:			
	相邻元素两两比较,大的往后放第一次完毕,最大值出现在了最大索引处;
	
    **本质:** 通过比较做排序 
    1.比较的次数   双重for 循环   (外循环决定比较多少轮,内循环决定每轮比
    较多少次)
    2.谁 和谁比较   相邻的两个元素  for(变量  外循环  I  内循环 j )
     arr[i]  arr[j]
    3.如何比较   前> 后  交换  arr[j] > arr[j + 1]

文字太多不想看? 没关系 接下来上图解;
在这里插入图片描述
这个图里面的值已经交换过来了 只要看排序交换的规律就好了
第一轮 0-1 1-2 2-3 3-4;红色曲线
第二轮 0-1 1-2 2-3;蓝色曲线
第三轮 0-1 1-2;黄色曲线
第四轮 0-1;绿色曲线

轮数
	 数组中一共五个参数交换四轮
	 如果是八个参数就交换七轮
	 由此得出一个规律 交换多少轮是由数组中有几个参数来定的
	 轮数为:数组名.length - 1;
每轮交换次数
	 第一轮比较四次;
	 第二轮比较三次;
	 第三轮比较两次;
	 第四轮比较一次;
	 交换次数是依次递减的;
	 为什么?
	     因为第一轮比较过后最大数一定在最大索引参数上
	     所以第二轮比较就可以不再比较索引4的参数的
	 由此

好,搞明白比较的轮数和每轮比较的次数 接下来就要上代码了


public static void main(String[] args) {
  //定义数组
  int[] arr = {24, 69, 80, 57, 13};
  BubblingArray(arr);冒泡排序  
 }
 
public static void BubblingArray(int[] arr) {
   int a = 0;
   //引入第三方变量
   for(int i = 0; i < arr.length - 1; i++){//外循环决定比较多少轮
    for(int j = 0; j < arr.length - 1 - i; j++){//内循环决定每轮比多少次 arr.length - 1为了防止索引越界
     if(arr[j] > arr[j + 1]){
      a = arr[j];
      //前面的数组参数赋值给第三方变量
      arr[j] = arr[j + 1];
      //后面的数组参数赋值给前面的数组参数
      //例:arr[1] = arr[2];
      arr[j + 1] = a;
      //第三饭变量再赋值给后面的数组参数;
     }
    }
   }
  }

外循环没什么好说的就是设置比较多少轮;
内循环是设置每轮比较多少次
j < arr.length - 1 - i;
这行代码运行出来就是递减的

代码包装成了方法;
if语句是用来判断前面的参数是否比后面的参数大 大的话就交换
一开始也分析了 冒泡排序就是前面参数与后面参数交换的
if语句里面就是经典的引入第三方变量反转

选择排序分析:

选择排序:
	原理:从0索引开始,依次与后面的元素作比较,小的在前,大的在后。
	
**本质:** 通过比较做排序 

  1.比较的次数   双重for 循环   (外循环决定比较多少轮,内循环决定每轮比
 较多少次)
  2.谁 和谁比较   相邻的两个元素  for(变量  外循环  I  内循环 j )
  arr[i]  arr[j]
  3.如何比较   arr[0] > arr[1 - max]	
     每轮首元素依次与后面的元素比较

OK 上图
在这里插入图片描述
拿数组{13,24,57,69,80}作比较
交换次数:
****
***
**
*

public static void main(String[] args) {
  //定义数组
  int[] arr = {24, 69, 80, 57, 13};
  select(arr);//选择排序
  fang1(arr);//遍历
  
 }
public static void select(int[] arr) {
  int a = 0;
  //第三方变量,作用反转
  for(int i = 0; i < arr.length - 1; i++ ){
   //外循环决定比较多少轮
   for (int j = i + 1; j < arr.length; j++){//内循环决定每轮比多少次  arr.length - 1为了防止索引越界
    if(arr[i] > arr[j]){
     //索引 i 与其他索引比较;
     a = arr[i];
     //索引0赋值给第三方变量
     arr[i] = arr[j];
     arr[j] = a;
    }
   }
  }
 }

好的,这就是冒泡与选择排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王笃定前行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值