Java学习之路——数组排序法(冒泡、直选、插入、反转)

数组排序法(冒泡、直选、插入、反转)

博主在学习Java语言,学到数组排序,认为这个知识点有必要总结记录一下,遂写下这篇博文。

1.冒泡排序法

思想:循环得出数组中的最大值(相邻两个比较大小,大的往后排)并剔除放在最后,剩下的数进行第二轮循环,得出剩下数的最大值,剔除并放在最后,
……
代码如下:

public class Test16 {
    //冒泡排序法;
    public static void main(String[] args){
        int[] a={2,1,4,3,6,5,8,7,10,9};
        //循环length-1次找最大值;
        for(int i=1;i<a.length;i++){
        //每一轮找最大值需要循环length-i次相邻两数比较;
            for(int j=0;j<a.length-i;j++){
                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));
    }
}

2.直接选择排序法

思想:循环找出最大值的下标,将最大值和最后一位交换位置,第二轮循环剩下来的数最大值的下标,将最大值和最后一位交换位置……
代码如下:

public class Test17 {
    //直接选择排序法;
    public static void main(String[] args){
        int[] a={2,1,4,3,6,5,8,7,10,9};
        //循环length-1次最大值和最后一位的交换;
        for(int i=1;i<a.length;i++){
            //定义maxIndex变量接收最大值的下标;
            int maxIndex=0;
            //因为maxIndex初始值为零,所以从a[1]开始比较,大值的下标赋给maxIndex;
            for(int j=1;j<=a.length-i;j++){
                if(a[j]>a[maxIndex]){
                    maxIndex=j;
                }
            }
            //交换最大值和最后一位的位置;
            int temp=a[a.length-i];
            a[a.length-i]=a[maxIndex];
            a[maxIndex]=temp;
        }
        System.out.println(Arrays.toString(a));
    }
}

3.插入排序法

思想:和摸纸牌的原理一样,摸第一张牌不用管,直接放手里,摸第二张牌需要和第一张比大小,小在前大在后;摸第三张牌先和最后一张比,小在前大在后,再和第一张比,小在前大在后……第一张不用管,需要插length-1张牌,每次要插的牌需要比到a[0]结束循环;
代码如下:

public class Test18 {
    //插入排序法;
    public static void main(String[] args){
        int[] a={2,1,4,3,6,5,8,7,10,9};
        //需要插入length-1个数;
        for(int i=1;i<a.length;i++){
        //定义inserNote为要插入的数;
            int inserNote=a[i];
            //定义j=i-1,先让要插入的数和前一位比较;
            int j=i-1;
            //一直比到a[0],要插入的数小于a[j],a[j]就向后推一位;
            while(j>=0&&inserNote<a[j]){
                a[j+1]=a[j];
                j--;
            }
            /*a[j]的值就空了,需要把要插入的数inserNote赋给a[j]
              但由于上面循环最后一步j--,所以要+1*/
            a[j+1]=inserNote;
        }
        System.out.println(Arrays.toString(a));
    }
}

4.反转排序法

思想:a[0]和a[a.length-1]交换,a[1]和a[a.length-2]交换……循环交换length/2次即可。
代码如下:

public class Test19 {
    //反转排序法;
    public static void main(String[] args){
        int[] a={2,1,4,3,6,5,8,7,10,9};
        for(int i=0;i<a.length/2;i++){
            int temp=a[a.length-1-i];
            a[a.length-1-i]=a[i];
            a[i]=temp;
        }
        System.out.println(Arrays.toString(a));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值