2020-08-17 选择排序、冒泡排序

1. 选择排序法

排序原理:每一次排序,选择未被排序的第一个元素的索引值,依次和后面的数比较,如果比后面的数大,则交换索引值, 当第i轮比较结束后,判断当前索引值时候发生改变,如果发生改变,则说明存更小的元素,那么就交换 //注意:每次交换得到的最大或最小值都是放在前面的(从前往后排序,和冒泡正好相反)
第一个for:为什么要-1(也可以不-1),因为轮到倒数第二个数的时候,排序就完成了,而且最后一个数也是和自己比较,所以即省略了

在这里插入图片描述

int min;
fot(int i=0;i<arr.length;i++){
 //为什么min=i?将第i个数的索引值给min,
 //为什么不是i前面的数??因为i前面的数已经排序好了+
 min=i;
 //为什么是i+1?因为要用arr[i]的下一个元素逐一和arr[i]比较
 //为什么是arr.length-1e而不是arr.length 因为由n个数只需要比较n-1次
 for(int j=i+1;j<arr.length-1;j++){
  if(arr[min]>arr[j]){
   min=j;
  }
 }
 if(min!=i){
  int temp=arr[min];
  arr[min]=arr[i];
  arr[j]=temp;
 }
}
在这里插入代码片

2. 冒泡排序法


排序原理:冒泡排序,顾名思义,就像水里的气泡,大的气泡先冒出来,小的气泡再最下面。
有5个数的无序数组,所以需要进行4次(n-1)重新排序, 每次重新排序,是将第一位置的数与其后一位的数进行值的比较,如果后值大于前值则将其换位,然后在将第二位置的数与其后一位的数进行值的比较,以此类推,直到最后一个数进行比较后,此时不难发现最后一个数必定是这组数组中最大的数,第一次重新排序结束。

进行第二次重新排序,同第一次原理相同,因为最后一位数已经是本数组中最大的数,所以不再进行比较,因此只需进行13次(n-2)比较,当第二次重新排序结束时,最后两位则是数组中最大的两个数。以此类推,最后一次只需要进行一次比较,则整个数组完成排序。

总结:对于一个具有n个数值的无序数组,需要进行(n-1)次重新排序,每次排序需进行(n-i)次比较。(i为重新排序的次数)~

在这里插入图片描述

 System.out.print("冒泡排序法:");
        int temp;
        /*我的错误for (int i = 0 i < arr.length; i++)*/
//        for (int i = 1; i < arr.length; i++) {/
        //每次重新排序,是将第一位置的数与其后一位的数进行值的比较,
            for (int j = 0; j <arr.length-i ; j++) {
                if(arr[j]>arr[j+1]){
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for (int i = 0; i <arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
    }//冒泡排序法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值