zoukankan      html  css  js  c++  java
  • 算法大神之路----排序(插入排序法)

    插入排序法 所谓插入排序法乃是将一个数目插入该占据的位置.

    输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕.

    代码示例:

    import java.util.Random;
    
    /**
     * 算法大神之路----排序(插入排序法)
     */
    public class Study03 {
    
        public static void main(String[] args) {
    
            //新建一个数组
            int[] arr = new int[6];
            Random r = new Random();
            for (int i = 0; i < arr.length; i++) {
            //使用随机数给数组赋值
                arr[i] = r.nextInt(50);
            }
            System.out.print("原数组为:");
            paint(arr);
            System.out.println("-----排序-----");
    
            //插入排序法,对数据进行排序
            for (int i = 0; i < arr.length; i++) {
    
                //从第二个数开始,取数,依次同它之前的数比较
                for (int j = 1; j <=i ; j++) {
                    //选择插入位置
                    if (arr[i] < arr[0]) {
                        //当比第一个数小的时候
                        int temp=arr[i];
                        for (int k = i; k >0; k--) {
                            arr[k]=arr[k-1];//循环遍历,向后移动一位
                        }
                        arr[0]=temp;
                        //当比第一个数小的时候,转换完毕后,直接跳过
                        continue;
                    }
                    //判断当不比第一个数小的情况下,在其他顺序数中,找到自己合适的位置
                    if(arr[i]>arr[j-1]&&arr[i]<arr[j]){
                        //除了第一个数以外,找到比前一个数大,比后一个数小的时候,即找到插入点
                        int temp=arr[i];
                        for (int k = i; k >=j; k--) {
                            arr[k]=arr[k-1];//循环遍历,向后移动一位
                        }
                        arr[j]=temp;
                    }
                }
                System.out.print("选取第"+(i+1)+"个数进行插入排序:");
                paint(arr);
            }
            System.out.println("---排序结束---");
            System.out.print("结果为:");
            paint(arr);
    
        }
    
        //将数组数据打印至控制台
        public static void paint(int[] arr){
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + "	");
            }
            System.out.println();
        }
    }

    本示例是以数组为例,从数组第一个元素开始,依次与之前的数据进行比较,找到元素数据值比较,找到合适的位置作为插入点,然后将插入点往后的数据依次移一位,将当前数据插入到数组中,即可得到排序的效果.

    控制台打印效果:

    原数组为:47    48    38    45    32    12    
    -----排序-----
    选取第1个数进行插入排序:47    48    38    45    32    12    
    选取第2个数进行插入排序:47    48    38    45    32    12    
    选取第3个数进行插入排序:38    47    48    45    32    12    
    选取第4个数进行插入排序:38    45    47    48    32    12    
    选取第5个数进行插入排序:32    38    45    47    48    12    
    选取第6个数进行插入排序:12    32    38    45    47    48    
    ---排序结束---
    结果为:12    32    38    45    47    48

    因为数组是一个固定长度的存储"集合",对于改变位置,插入等操作相对于链表来说比较复杂,所以插入排序法更多的是使用在链表的集合之中.

  • 相关阅读:
    js文件内部导入引用js文件方法
    CSS3.0动画之hover---Y轴----3D旋转
    静态的html页面想要设置使用浏览器缓存
    opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用
    input获取永久焦点
    修改zepto源代码,使支持wp8的ie10
    EChart
    input属性disabled和readonly的区别
    trigger
    解决jquery mobile的遇到高版本Chrome一直转圈,页面加载不出来的情况。
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7351244.html
Copyright © 2011-2022 走看看