一起学算法(插入排序篇)

概念:

插入排序(inertion Sort)一般也被称为直接插入排序,是一种简单的直观的排序算法

工作原理:将待排列元素划分为(已排序)和(未排序)两部分,每次从(未排序的)元素选择一个插入到(已排序的)元素中的正确位置,这个位置类似于平时打扑克牌摸牌的操作,右手摸牌,根据牌面的大小放到左手边正确的位置上

具体实现:使用双层循环,外层循环枚举除了第一个元素之外的所有元素,内层循环遍历当前元素前面的有序表,进行待插入位置查找,并进行移动

java 复制代码
 public void insertSort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        for (int i = 1; i < arr.length; i++) { // 待插入元素的索引
            int insertEle = arr[i];//对待插入元素进行保存
            int j = i - 1;
            //有序区中存在多少个元素就需要遍历多少次
            for (; j >= 0; j--){
                if (arr[j] >= insertEle) {
                    arr[j + 1] = arr[j];
                } else {
                    break;
                }
            }
            //直到找到有序区第一个比待插入元素小的位置,然后在j+1上添加元素
            arr[j + 1] = insertEle;
        }
    }

leetcode题:

删除某些元素后的数组均值

java 复制代码
class Solution {
    public double trimMean(int[] arr) {
        if(arr==null||arr.length==0){
            return 0;
        }
        Arrays.sort(arr);
        int count= arr.length/20;
        double sum=0;
        for (int i =count; i < arr.length-count; i++) {
              sum+=arr[i];
        }

        return sum/(arr.length-2*count);
    }
}

去掉最低工资和最高工资后的平均工资

java 复制代码
class Solution {
    public double average(int[] salary) {
     insertSort(salary);
     double sum=0;
     for(int i=1;i<salary.length-1;i++){
         sum+=salary[i];
     }
     return sum/(salary.length-2);
    }
     private void insertSort(int[] arr) {
        if (arr == null || arr.length == 0) {
            return;
        }
        for (int i = 1; i < arr.length; i++) { // 待插入元素的索引
            int insertEle = arr[i];//对待插入元素进行保存
            int j = i - 1;
            //有序区中存在多少个元素就需要遍历多少次
            for (; j >= 0; j--){
                if (arr[j] >= insertEle) {
                    arr[j + 1] = arr[j];
                } else {
                    break;
                }
            }
            //直到找到有序区第一个比待插入元素小的位置,然后在j+1上添加元素
            arr[j + 1] = insertEle;
        }
    }
}

学生分数的最小差值

java 复制代码
class Solution {
    //插入排序
    public void insertSort(int[] nums){
        if(nums==null||nums.length==0){
            return;
        }
        for (int i =1; i <nums.length; i++) {
            int insertEle=nums[i];
            int j=i-1;
            for(;j>=0;j--){
                if(nums[j]>=insertEle){
                    nums[j+1]=nums[j];
                }else{
                    break;
                }
            }
            nums[j+1]=insertEle;
        }
    }

    public int minimumDifference(int[] nums, int k) {
        if (nums.length == 1) {
            return 0;
        }
        insertSort(nums);
        int min=nums[k-1]-nums[0];
        for (int i = 1; i <=nums.length-k; i++) {
            min=Math.min(min,nums[i+k-1]-nums[i]);
        }
        return min;
    }
}
相关推荐
秋夫人15 分钟前
B+树(B+TREE)索引
数据结构·算法
代码雕刻家44 分钟前
数据结构-3.1.栈的基本概念
c语言·开发语言·数据结构
梦想科研社1 小时前
【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)
开发语言·算法·数学建模·matlab·无人机
Milo_K1 小时前
今日 leetCode 15.三数之和
算法·leetcode
Darling_001 小时前
LeetCode_sql_day28(1767.寻找没有被执行的任务对)
sql·算法·leetcode
AlexMercer10121 小时前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
Greyplayground1 小时前
【算法基础实验】图论-BellmanFord最短路径
算法·图论·最短路径
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
源代码:趴菜1 小时前
LeetCode63:不同路径II
算法·leetcode·职场和发展
儿创社ErChaungClub1 小时前
解锁编程新境界:GitHub Copilot 让效率翻倍
人工智能·算法