zoukankan      html  css  js  c++  java
  • 三分钟彻底理解插入排序

    1、原理:从整个待排序列中选出一个元素插入到已经有序的子序列中去,得到一个有序的、元素加一的子序列,直到整个序列的待插入元素为0,则整个序列全部有序。

    2、思路:

       (1)设置监视哨r[0],将待插入的记录值赋值给r[0];

      (2)设置开始查找的位置j;

      (3)在数组中搜索,搜索 中将第j个记录后移,直到r[0].key>=r[j].key为止

      (4)将r[0]插入r[j+1]的位置上。

    3、举例

      (1)待排序数组:[5,3,4,0,6]

      (2)第一趟排序:[5,3,4,0,6]

        将r[0]=5设置为监视哨,将1位置上的数3和监视哨5进行比较,3小于5,将5和3交换。

        排序结果为:[3,5,4,0,6]  此时0-1范围上的数值大小已经排好了。

      (3)第二趟比较:[3,5,4,0,6]

        将4和5进行比较,4比5小,交换位置,排序结果为:[3,4,5,0,6]

        将4和3进行比较,4比3大,不交换位置。

        排序结果为:[3,4,5,0,6]  此时0-2位置上的数值大小已经排列好了

      (4)第三趟比较:[3,4,5,0,6]

        将0和5做比较,0比5小,交换位置,排序结果为:[3,4,0,5,6]

        将0和4做比较,0比4小,交换位置,排序结果为:[3,0,4,5,6]

        将0和3做比较,0比3小,交换位置,排序结果为:[0,3,4,5,6]

        排序结果为:[0,3,4,5,6],此时0-3位置上的书已经排好序

      (5)第四趟比较:[0,3,4,5,6]

        6比5大,已经全局有序 ,不用进行任何的交换

    4.java实现的代码

    import java.util.Scanner;
    
    public class InsertSort {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个数组的大小:");
            int a = sc.nextInt();
            System.out.println("请输入一个数组:");
            int[] arr = new int[a];
            for (int i=0 ; i<a;i++){
                arr[i]= sc.nextInt();
    
            }
            //遍历数组
            for(int k = 0 ; k<arr.length;k++){
                System.out.print("  "+arr[k]);
            }
            System.out.println();
            insertSort(arr);
    
        }
        public static void insertSort(int[] arr){
            if(arr==null || arr.length<2){
                return;
            }
            for(int i=1; i <arr.length;i++){
                for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
                    int temp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
    
            }
            //将数组进行遍历
            for(int k = 0 ; k<arr.length;k++){
                System.out.print("  "+arr[k]);
            }
    
    
        }
    }

      算法的最大时间复杂度仍然是O(n^2),如果数据有序,那么插入排序的时间复杂度是O(n),如果数据是无序的,比如说是逆序的,那么时间复杂度就是O(n^2)。当数据状况不同,一律按照最差的时间复杂度进行估计。

      时间复杂度为一个算法流程中,常数操作数量的指标,常用O来表示

  • 相关阅读:
    Visual Studio 2008中文正式版
    属性控制类
    PowerDesigner11技巧
    OPENXML用法
    .net下载文件
    Merge Into 语句代替Insert/Update在Oracle中的应用实战
    PowerDesigner中使用vbscript访问对象进行批量操作
    转:SubSonic介绍和相关文章
    C# 多线程控制控件实例(例程简单,注释详细)
    学习SubSonic的笔记 Version 2.1
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10465719.html
Copyright © 2011-2022 走看看