数组排序 冒泡排序 插入排序 选择排序

数组的排序

冒泡排序

算法思想 : 从头开始依次比较两个相邻的元素 如果后面一个比前面一个大 说明顺序不对,则将两个交换,本次循环完成后从头开始,直到没有发生交换为止.

给你一个栗子

对5 2 3 1 4排序

首先 5 和 2 比较 5>2 , 将5 和 2 交换位置 之后的元素按照同样的方法进行比较交换

第一次比较交换完成后 2 5 3 1 4

第二次比较交换完成后 2 3 5 1 4

第三次比较交换完成后 2 3 1 5 4

第四次比较交换完成后 2 3 1 4 5

至此 第一次循环完成 (完成第一次排序)

之后每循环一次完成一次排序 直至没有发生交换 此时意味着排序完成

int [] a=new int[]{5 ,2 , 3, 1 ,4};
        for (int i = 0; i < a.length-1; i++) {
            
            for (int j = 0; j < a.length-i-1; j++) {
                //a.length-i-1 因为 5个元素进行了四次比较
                if (a[j]>a[j+1]){
                    int temp=a[j]; //将两个元素交换
                    a[j]=a[j+1];
                    a[j+1]=temp;

                }
            }
        }
        System.out.println(Arrays.toString(a));

选择排序

算法思想 : 首先在未排序的序列中,找到最大(小)的元素,存放到排序序列的起始位置,然后,再从剩余的未排序的元素中继续寻找最大(小)元素,然后放在已排序列的队尾

给你一个栗子

还是 5 2 3 1 4 的排序

首先通过一轮循环比较找出最小的元素 1 然后将 1 放到第一个位置 当做已排序列的第一个元素

此时 1 5 2 3 4

再次循环 找出5 2 3 4中最小的匀速为 2 将2 放入 已排序列 的1 之后

此时 1 2 5 3 4

再次循环 找出 5 3 4中最小的元素为 3 将 3 放入已排序列 1 2 之后

此时 1 2 3 5 4

再次循环 找出 5 4 中最小的元素为 4 将4放入 已排序列1 2 3 之后

此时 1 2 3 4 5

排序完成

int [] a=new int[]{5 ,2 , 3, 1 ,4};
        for (int i = 0; i < a.length-1; i++) {

            for (int j = i; j <a.length -1; j++) {
                if (a[i]>a[j+1]){
                   int temp=a[i] ;
                   a[i]=a[j+1];
                   a[j+1]=temp;
                }
            }


        }
        System.out.println(Arrays.toString(a));

插入排序

算法思想 : 每次将一个待排序的数据按照大小插入到前面已排队列中,直到数据插入完成

给你一个栗子

又是 5 2 3 1 4 的排序

用一个临时变量存储要排序的元素 4

记下4 的位置 , 然后让4 和之前的元素一一比较 寻找出比4大的元素 5 将 4 插入5 的后面

5 之后的元素 统一向后挪一位

此时 4 5 2 3 1

之后 记录1的位置 然后让1 和之前的元素一一比较 , 寻找出比1大的元素 4 将 1 插入4 的后面

4 之后的元素 统一向后挪一位

此时 1 4 5 2 3

之后的元素均按此方法一一排序, 直至排序完成

int [] a=new int []{2,5,6,3};

        for (int i = 0; i < a.length; i++) {
//外层循环取出每次排序需要比较的数
            int current=a[i];  //记录当前比较的 数  例 数a
            for (int j = i-1; j >=0; j--) {
                //内层循环进行比较           取出的数  上层循环中取出的数 之前的数   取出a之前的数
                if (current<a[j]){
                    a[j+1]=a[j];
                    a[j]=current;
                }
            }
        }
        System.out.println(Arrays.toString(a));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值