算法大神之路----排序(插入排序法)

Posted 博客王大锤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法大神之路----排序(插入排序法)相关的知识,希望对你有一定的参考价值。

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

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

代码示例:

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] + "\t");
        }
        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

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

以上是关于算法大神之路----排序(插入排序法)的主要内容,如果未能解决你的问题,请参考以下文章

算法大神之路----排序(选择排序法)

[4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔

[2] 算法之路 - 选择之堆排序

算法笔记 排序算法完整介绍及C++代码实现 HERODING的算法之路

算法排序----插入排序法

三大基础排序算法(冒泡排序,选择排序,插入排序)