zoukankan      html  css  js  c++  java
  • 插入排序

    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
    插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

    插入排序非常类似于整扑克牌。

    在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。

     代码实现:

        public int[] insert_Sort(int[] arrs) {
            int i = 0;  
            int j = 0;  
            int tmp = 0;  
            System.out.println("排序前的元素为:");
            for (int num : arrs) {
                System.out.print(num+" ");
            }
            System.out.println();
            for(i = 1;i< arrs.length;i++)  
            {  
              tmp = arrs[i];//从待插入组取出第一个元素。   
              j = i-1; //i-1即为有序组最后一个元素(与待插入元素相邻)的下标   
              while(j >= 0 &&  tmp < arrs[j])  //注意判断条件为两个,j>=0对其进行边界限制。第二个为插入判断条件   
              {  
                arrs[j+1] = arrs[j];//若不是合适位置,有序组元素向后移动   
                j--;   
              }
              arrs[j+1] = tmp;//找到合适位置,将元素插入。   
              //打印每一轮的排序结果
              System.out.println("第" + (i) +"轮排序:");
              for (int num : arrs) {
                System.out.print(num + " ");
              }
              System.out.println();
            }  
            System.out.println();
            System.out.println("排序后的元素为:");
            for (int num : arrs) {
                System.out.print(num+" ");
            }
            return arrs;
        }
        public static void main(String[] args) {
            Sort sort = new Sort();
            int[] arrs = {4,2,6,8,1,3,5};
            sort.insert_Sort(arrs);
        }

    结果:

    突破昨天的自己
  • 相关阅读:
    mysql 历史版本下载
    mysql 5.7 版本 You must reset your password using ALTER USER statement before executing this statement报错处理
    5.7 zip 版本的安装 以及遇到的坑
    mysql 5.6zip版本的卸载与5.7 zip 版本的安装
    mysql数据库的备份与还原
    本地Navicat连接docker里的mysql
    docker修改数据库密码
    docker 在push镜像到本地registry出现的500 Internal Server Error
    linux 没有界面内容显示不全解决办法
    json与map互相转换
  • 原文地址:https://www.cnblogs.com/ya-qiang/p/8902398.html
Copyright © 2011-2022 走看看