【插入排序,选择排序】

基础算法(排序算法)

本系类介绍一些简单的基础排序算法;包括冒泡排序,插入排序,选择排序,希尔排序,等。本文暂介绍插入排序法和选择排序法。

2 插入排序(Insertion Sort)

2.1 插入排序(基本)

插入排序,顾名思义,依靠“插入”操作进行排序;在本文中,使用数组 nums{3,2,6,4,1,8,9,3}; 默认目标为升序排序。
插入排序的基本思想是,将后一个元素与之前元素相比较,插入到合适的位置;
插入排序
插入排序的主要步骤如上图;需要注意的是,我们在一开始,假定第0号位为有序,即从第1号位开始进行插入排序。
代码实现如下:

/**
*插入排序
*
*/
public static int[] insertSort(int[] nums){
        if (nums.length==0){
            return nums;//如果数组为空,不用排序
        }
        for (int i=1;i<nums.length;i++){
            //外层循环,从1号位(第二个开始)
            for (int j=i;j>0;j--){
                //内层循环,与排好序的子序列元素比较,如果后面的数据小于前面的,则交换
                if (nums[j]<nums[j-1]){
                    int temp=nums[j-1];
                    nums[j-1]=nums[j];
                    nums[j]=temp;
                }else {
                    //如果不小于,则退出内层循环
                    break;
                }
            }
        }
        return nums;
    }

插入排序的关键点在于“插入”操作,在代码上,“插入”操作体现在将目标元素与有序子数组的元素进行比较;如果小于则交换。
测试:
测试代码
测试结果:
测试结果

3 选择排序(Selection Sort)

3.1选择排序(基本)

选择排序就是在无序子数组中寻找最小的值,放到第0号位,第0号位称为有序子数组;再在剩下的无需子数组中寻找最小值与1号位交换,此时有序子数组增长一位,无需子数组减少一位 然后重复此操作
选择排序
代码实现:

/**
*插入排序
*/
public static int[] selectionSort(int[] nums){
        if (nums.length==0){
            return nums;//如果数组为空,不用排序
        }
        for(int i=0;i< nums.length;i++){
            int minIndex=i;
            for (int j=i;j<nums.length;j++){
                if (nums[j]<nums[minIndex]) {
                    minIndex = j;//将最小数字的下标保存
                }
            }
            int temp=nums[minIndex];
            nums[minIndex]=nums[i];
            nums[i]=temp;         //交换
        }
        return  nums;
    }

值得注意的是,在代码中,最小元素的确定是通过for循环;保存其下标,再进行交换。
测试:
测试
运行结果:
结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值