排序算法:插入排序(代码片段)

dcy521 dcy521     2022-12-18     227

关键词:

要点


 

基本思想:就是把一个新的元素插入已排好序的数组形成一个新的已排好序的数组(比方说:有一个数组是 1,3,4,6,8  现在要将“2”插入到数组中,那么插入位置就是“1”和“3”之间,形成一个新的有序数组),就好像打扑克牌一样,比如先拿一张5在手里,再摸到一张4,比5小,插到5前面,摸到一张7,嗯,比5大,插到5后面,摸到一张8,比7大,插到7后面,就这样。。。

实现思路:从第一个元素开始,取下一个元素比较后实现排序,形成新的数组,再取第三个元素与该数组比较,比较时从该数组的最后一位开始比较,若新元素比与其比较的元素小,则将该比较的元素后移以为,直到新元素比该数组左边找到其应该插入的位置。

图解往往会更好,我下边这张图很清楚,很容易看懂,顺便说一下个人理解!

 

技术图片

上边图中,通过直接插入排序,将无序数列变为从小到大有序数列!原先数列为:3,44,38,5,47,15,36,26,27,2,46,4,19,50,48

第一步:先将第一个元素“3”看作是一个有序数列

第二步:将原先被看作为有序数列的“3”的后一位元素抽出,与原先有序数进行比对(图中先把“3”作为一个有序数列,然后将后边的“44”抽出,与其比较,原先有序数列中的元素如果比抽出的元素小,则不变,如果比抽出的元素大,则将原先数列中比较的元素向后移动,“3”比“44”小 不变)

第三步:依照第二步步骤,继续向后移动,这时新的有序数列从原先的“3”变为了“3,44”,继续向后移动,将“38”抽出,与有序数列进行比较,从后向前,先与“44”比较,比抽出的元素大,所以向后移动位置,然后再与有序数列的中“3”进行比较,比抽出的数列小,不变,所以就将抽出的元素“38”归位,放到已经向后移动过的元素“44”的位置。

第四步:接下来的过程就依照上述步骤,不停的向后移动,不停的将抽出的元素与新组成的有序数列进行比对,原先有序数列中的元素如果比抽出的元素小就不变,大就向后移动,直到排序完成结束!

 

代码(C#版本)

 


 

class Program
    
        static void Main(string[] args)
        
            int[] arr =  10, 25, 15, 8, 65, 35, 48, 95, 78, 13 ;
            InsertSort(arr);
            for (int i = 0; i < arr.Length; i++)
            
                Console.WriteLine(arr[i]);
            
            Console.ReadKey();
        
        /// <summary>
        /// 直接插入排序
        /// </summary>
        /// <param name="array">需要排序的数组</param>
        public static void InsertSort(int[] array)
        
            //循环遍历数组,从第二个元素开始
            for (int i = 1; i < array.Length; i++)
            
                //将第二个元素拿出
                int temp = array[i];
                for (int j = i - 1; j >= 0; j--)
                
                    //原先有序数列如果比抽出的元素大
                    if (array[j] > temp)
                    
                        //则向后移动位置
                        array[j + 1] = array[j];
                        array[j] = temp;
                    
                    else
                        break;
                
            
        
    

学习完成!(*^▽^*)

七大排序算法(代码片段)

目录一排序的概念二常见的排序算法(1)插入排序(2)选择排序(3)交换排序(4)归并排序三插入排序(1)直接插入排序1.直接插入排序的思想2.直接插入排序的思想图解3.直接插入排序的代码及运... 查看详情

算法学习直接插入排序(代码片段)

一、引言  今天学习第三种排序算法:直接插入排序,以前没怎么详细了解过,今天来看看图解一下~~二、直接插入算法插入算法工具类/***直接插入排序算法工具类*/publicclassChaRuUtil/***直接插入排序【对外暴露静态方法】*/publi... 查看详情

排序算法-插入排序(代码片段)

算法简介插入排序(InsertionSort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1... 查看详情

排序算法总结(代码片段)

文章目录1.插入排序1.1直接插入排序1.2希尔排序2.选择排序2.1直接选择排序2.2堆排序3.交换排序3.1冒泡排序3.2快速排序下面来详细介绍以下以上几种排序算法的具体实现1.插入排序插入排序分为直接插入排序和希尔排序.首先我们来... 查看详情

排序算法之插入排序(直接插入排序折半插入排序希尔排序)(代码片段)

排序算法之插入排序插入排序直接插入排序理论算法实现折半插入排序算法实现希尔排序概念算法实现后续插入排序在排序过程中,根据数据元素是否完全在内存中,可以将排序分成两类:内部排序:是指在排序... 查看详情

八大内部排序算法之希尔堆排序插入排序算法(代码片段)

前言我们所知的八大内部的排序算法有冒泡排序、选择排序、快速排序、归并排序、链式基数排序、插入排序、希尔排序、堆排序、而这篇文章主要研究这其中的希尔排序和堆排序算法,之前的排序算法都在下面连接中介绍... 查看详情

九大排序算法(c语言)(代码片段)

九大排序算法文章目录九大排序算法直接插入排序(插入排序)折半插入排序(插入排序)希尔排序冒泡排序(交换排序)快速排序(交换排序)简单选择排序(选择排序)堆排序(选... 查看详情

九大排序算法(c语言)(代码片段)

九大排序算法文章目录九大排序算法直接插入排序(插入排序)折半插入排序(插入排序)希尔排序冒泡排序(交换排序)快速排序(交换排序)简单选择排序(选择排序)堆排序(选... 查看详情

插入排序算法(代码片段)

importcn.idestiny.util.GeneratedArray;/***插入排序算法实现*/publicclassInsertionSortpublicstaticvoidmain(String[]args)//随机生成指定长度数组int[]randomarr=GeneratedArray.randomGeneratedArray(50,60,10000);//打印为排序的数组Ge 查看详情

排序算法(代码片段)

内部排序:数据记录在内存中进行排序外部排序:待排序文件较大,需要访问外存常见的内部排序:插入排序(直接插入、折半插入、希尔排序)、交换排序(冒泡、快排)、选择排序(简单选择、堆排序)、归并排序(2路归... 查看详情

排序算法---插入排序(代码片段)

  前面写了选择排序的原理和实现。现在来写一下插入排序的实现插入排序的原理和实现  通常人们在整理桥牌的方法是一张一张的来,将每张牌插入到其他已经有序的牌中的适当位置。在计算机当中,为了给要插入的元素... 查看详情

排序算法(代码片段)

排序算法排序算法两阶段第一阶段(比较排序)插入排序合并排序堆排序快速排序第二阶段(非比较排序)计数排序基数排序桶排序第一阶段:比较排序插入排序插入排序的主要思想:将当前的元素放入前面合适的位置插入排序... 查看详情

插入算法(代码片段)

算法简介插入排序(InsertionSort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1... 查看详情

插入和希尔排序算法(代码片段)

插入和希尔排序算法插入排序插入式排序属于内部排序法,是对欲排序的元素以插入的方式寻找该元素的适当位置publicstaticvoidinsertSort(int[]arr)for(inti=1;i<arr.length;i++)//定义待插入的数intinsertVal=arr[1];intinsertIndex=... 查看详情

排序算法——插入排序(代码片段)

/***插入排序**<p>算法思路:**<p>1.选取数列第一个数作为已排序,数列的其他部分作为待排部分*<p>2.每次取待排部分的第一个元素待插入数,然后从已排序部分末尾开始遍历,直到找到比待插入数小(或者打)的数*&... 查看详情

转载8大排序算法(代码片段)

https://www.jianshu.com/p/e6ad4423efcd排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法... 查看详情

算法:希尔排序(代码片段)

算法:希尔排序快速开始百科解释  希尔排序(Shell‘sSort)是插入排序的一种又称“缩小增量排序”(DiminishingIncrementSort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年... 查看详情

排序算法-插入排序(insertionsort)(代码片段)

算法描述一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将... 查看详情