首页 > 其他分享 >插入排序

插入排序

时间:2022-10-14 01:33:05浏览次数:49  
标签:56 leftIndex 插入排序 元素 34 12 297

插入排序的原理:将指针指向某元素(一般从第二个元素开始),假设该元素的左侧全部有序,将该元素抽取,然后按照从右往左的顺序分别与其左边的元素进行比较,遇到较大的元素便将较大的元素往右移,直到找到比该元素小的或者最左面发现其右侧的元素都比他大的时候,停止,此时会出现一个空位,将指针所指向的元素放到空位中,此时该元素左侧的元素都比他小,右侧的元素都比他大,此时指针向后移一位,重复进行上述操作,毎操作一轮,左侧有序元素就加一个,右侧无序元素就少一个。

原理不是很好懂,但是用实际操作来讲就很容易理解,给定一组数:297,34,56,12

第一轮:指针最初第二个元素34,从右向左开始比较一次,只有一个元素297,297>34,将297后移,空出一个位置,将34填进去

得到:34,297,56,12

第二轮:指针指向下一个元素,56,从右向左开始比较两次,有两个元素34,297,其中297大于56,34小于56,找到比自己小的元素了,297往后移,56填补空位

得到:34,56,297,12

第三轮:指针指向下一个元素,12,从右向左开始比较三次,有三个元素34,56,297,297,56,34都比12大,找不到比自己小的元素,其他元素往右移,空出第一个元素的位置,此时12填入

得到:1,34,56,297

int[]a={12,87,32,34,2,6};
        int len=a.length;
        for (int i = 1; i < len; i++) {//从第二个元素开始从右往左比较
            int temp=a[i];//将a【i】抽出来进行比较
            int leftIndex=i-1;//左边元素索引值为i-1
            while (leftIndex>=0&&a[leftIndex]>temp)//向右移
            {
               a[leftIndex+1]=a[leftIndex];//左边元素值移到右边元素
                leftIndex--;//如果左边还是大于右边,索引值往左,而且必须大于零在循环条件里面加上
            }//移完之后,空出一个位置a[左边空出的索引,原本是i,后来变成了leftindex+1],需要用a【i】去填补
            a[leftIndex+1]=temp;
        }
        System.out.println(Arrays.toString(a));

 

标签:56,leftIndex,插入排序,元素,34,12,297
From: https://www.cnblogs.com/Liku-java/p/16790241.html

相关文章

  • JavaScript 实现 -- 插入排序
    前言本文主要记录了JavaScript实现--插入排序,以及原理、时间复杂度、空间复杂度和算法稳定性。插入排序插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一......
  • 插入排序算法步骤和思路
    算法步骤将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置......
  • 003 插入排序
    //插入排序从左扩大范围最小值放在最右边publicstaticvoidinsertionSort(int[]arr){if(arr==null||arr.length<2){return;......
  • 选择排序、冒泡排序、插入排序、快速排序
    排序选择排序以数组a[8]={12,23,8,15,33,24,77,55}为例WHILE(notsortedyet)findsmallestunsorteditemSwapfirstunsorteditemwiththesmallests......
  • java----冒泡,选择,插入排序
    1.冒泡排序packagelearnday06排序;//动态录入往数组里录入n个数字,并用冒泡排序importjava.util.Arrays;importjava.util.Scanner;publicclassMaopaopaixu{ publ......
  • 插入排序 和 希尔排序 java
    ​​http://mp.weixin.qq.com/s/deUy_VPJ2m6BFbrEZp9DKg​​​选择排序/***Createdbyfupengon2017/1/19.*/publicclassinsertstaticvoidshow(int[]a){......
  • 2022J T2 插入排序
    题目链接看到这个题第一反应肯定是模拟啊每次查询前都排一次查询后再复原很显然是超时的(但好像修改的时候进行排序和复原会更优一点)(反正都会超时无所谓了)考场也确实......
  • 王道-数据结构-插入排序
    插入排序分为直接插入和折半插入排序直接插入排序折半插入排序1.算法思想用我自己的话说:一开始选中第二个元素,然后把之前的元素看做已经是排好序的,然后一直对......
  • 找朋友(插入排序青春版)
    找朋友(插入排序青春版)[(https://www.online1987.com/找朋友/)]#include<iostream>#include<vector>usingnamespacestd;intmain(){ intN=0; cin>>N; vect......
  • 16 -- 排序算法之插入排序
    算法介绍:插入排序属于内部排序法,时对于待排序的元素以插入的方式找到改元素的适当位置,以达到排序的目的。【类似于生活中的斗地主游戏,每抓起一张牌按照便把改张牌按照指定......