Java中的冒泡排序与选择排序

冒泡排序

实现原理:

相邻的两个数比较大小,如果前者小于后者,则不变,让后者与后者后面的数做比较;如果前者大于后者,则让它两换位置,用大的那个数再与后者做比较,直到比较完,那么最后一位数就是最大的,这是第一轮。第二轮同理,但是由于在第一轮就确认了最后一个是最大的数了,就可以不用管最后一个数,然后第三轮不用管倒数第二个,第四轮不用管倒数第三个。。。。。。
例:

3    4    2    6    9    5

第一轮:3小于4,不变。4大于2,4与2交换位置。4小于6,不变。6小于9,不变.9大于5,9与5交换位置。第一轮结束,得出最大值9。结果如下:

3    2    4    6    5    9

第二轮:3大于2,3与2交换位置。3小于4,不变。4小于6,不变。6大于5,6与5交换位置。确定出第二大的值6。结果如下:

2    3    4    5    6    9




后面接着比较大小,直到确定出最小值,也就是最前面的值。
最后结果:

2    3    4    5    6    9
代码实现:
public static void main1() {
        int[] arr={3,4,2,6,9,5};
        //先判断比较的轮数
        for (int i = 1; i < arr.length; i++) {
            //在判断比较的次数
            for (int j = 0; j < arr.length-i ; j++) {
                //进行前后对比大小
                if (arr[j]>arr[j+1]){
                    //交换值
                    int a=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=a;
                }
            }
        }
        //输出数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }

运行结果:

2    3    4    5    6    9

选择排序

实现原理:

不停比较数的大小,记录最小值的下标,最小值的下标和第一个值的下标进行交换,即在每一轮比较中,选择当前比较数中最小的那个,放到最前面的位置。
例:

4    6    9    2    3

第一轮找到最小值2,2与第一个值4 的下标进行交换。

2    6    9    4    3

第二轮找到当前最小值3,3与第二个值6的下标进行交换。

2    3    9    4    6

第三轮找到当前最小值4,4与第三个值9的下标进行交换。

2    3    4    9    6

第四轮找到当前最小值6,6与第四个值9的下标进行交换。

2    3    4    6    9

最后就剩下最大值9,它的下标也已经被交换到了最后一个,所以无需在比较。

代码实现:
private static void main11() {
        int[] arr={4,6,9,2,3};
        //确定循环查找的次数
        for (int i = 0; i < arr.length-1; i++) {
            //默认第一个为最小值
            int minIndex=i;
            //划分查找的范围,从i到length-1
            for (int j = i; j <= arr.length-1; j++) {
                //在范围里进行打擂台比较大小
                if (arr[minIndex]>arr[j]){
                    //找到最小值的下标
                    minIndex=j;
                }
            }
            //将最小值的下标与最前面值的下标做交换,进行排序
            int a=arr[i];
            arr[i]=arr[minIndex];
            arr[minIndex]=a;
        }
        //输出数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }

运行结果:

2	3	4	6	9
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值