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

这篇具有很好参考价值的文章主要介绍了一起学算法(插入排序篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念:

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

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

一起学算法(插入排序篇),一起学算法,算法,数据结构

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

 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题:

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

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);
    }
}

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

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;
        }
    }
}

学生分数的最小差值文章来源地址https://www.toymoban.com/news/detail-619235.html

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;
    }
}

到了这里,关于一起学算法(插入排序篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法 数据结构 递归插入排序 java插入排序 递归求解插入排序算法 如何用递归写插入排序 插入排序动图 插入排序优化 数据结构(十)

    1. 插入排序(insertion-sort):                                           是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入     算法稳定性:                  

    2024年02月09日
    浏览(56)
  • 数据结构算法-插入排序

    一、概念及其介绍 插入排序(InsertionSort),一般也被称为直接插入排序。 对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表 。在其实现过程使用双层

    2024年02月21日
    浏览(46)
  • 【一起学数据结构与算法】快速教你了解并实现单链表

    此篇是对单链表知识的学习和实现,基本上大体的方法实现和思路都已经表达,如果有不对的地方,还请各位大佬多多指教! 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素

    2024年02月19日
    浏览(43)
  • 数据结构与算法-插入&希尔&归并

        一:排序引入      我们通常从哪几个方面来分析一个排序算法?         1.时间效率:决定了算法运行多久,O(1)         2.空间复杂度:         3.比较次数交换次数:排序肯定会牵涉到两个操作,一个比较是肯定的。交换。         4. 稳定性 :这是

    2024年02月09日
    浏览(39)
  • 【数据结构与算法】十大经典排序算法-插入排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 插入排序(Insertion Sort)是一种简单直观的排序算法,其基本思想是将一个记录插入到已排好序的有序序列中,直到所有记录

    2024年02月13日
    浏览(83)
  • 数据结构与算法:插入排序&希尔排序

    假设现在你有一个有序的数组,你要把一个数据插入到数组中,保证插入后依然有序,要怎么做? 对于人来说,这个问题就像是在整理扑克牌,瞄一眼就知道应该插入什么位置。但是对于程序来说,就需要一一对比,直到找到一个位置 左边比它大,右边比它小 ,就算找到了

    2024年01月17日
    浏览(58)
  • 数据结构与算法—插入排序&选择排序

    目录 一、排序的概念 二、插入排序   1、直接插入排序  特性总结: 2、希尔排序 特性总结:  三、选择排序 1、直接选择排序  特性总结: 2、堆排序—排升序(建大堆) 向下调整函数 堆排序函数 特性总结: 代码完整版:   头文件  函数文件  测试文件 排序 :所谓排序,

    2024年01月20日
    浏览(63)
  • 数据结构算法练习 插入排序 冒泡排序

    插入排序 代码如下  package main import \\\"fmt\\\" func main() {     a := []int{4, 5, 6, 1, 3, 2}         b := insert(a)     for i := 0; i len(b); i++ {         fmt.Println(b[i])     } } func insert(a []int) []int {     if len(a) = 1 {                   如果数组长度小于等于1 不用排序直接返回          retur

    2024年02月08日
    浏览(58)
  • 【数据结构与算法】:插入排序与希尔排序

    🔥 个人主页 : Quitecoder 🔥 专栏 : 数据结构与算法 欢迎大家来到初阶数据结构的最后一小节:排序 排序是一种将一组对象按照某种特定顺序重新排列的过程。在计算机科学中,排序是数据处理中非常基本且重要的操作,它可以帮助人们更有效地理解和分析数据。排序的顺序

    2024年03月18日
    浏览(39)
  • 【数据结构与算法】插入排序和希尔排序

      目录 一.插入排序  InsertSort 基本思想 动图演示  特性总结 二.希尔排序  ShellSort 基本思想 图例 特性总结 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 当插入第i(i=1)个元素

    2023年04月18日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包