插入排序详解(Java实现)

一、基本思想

    插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

二、算法描述

    1.从第一个元素开始,该元素可以认为已经被排序;
    2.取出下一个元素,在已经排序的元素序列中从后向前扫描;
    3.如果该元素(已排序)大于新元素,将该元素移到下一位置;
    4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
    5.将新元素插入到该位置后;
    重复步骤2~5。

三、算法分析

    插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

四、算法代码实现

package sort;

public class InsertSort {
    public static void main(String[] args) {
        int[] array = {53,68,32,96,58,12,25,68,99};
        System.out.println("原序列:");
        for (int i : array) {
            System.out.print(i+" ");
        }
        System.out.println();
        insertSort(array);
        System.out.println("排序后:");
        for (int i : array) {
            System.out.print(i+" ");
        }
    }
    

    public static void insertSort(int[] a){
        int preIndex, current;
        //i作为本次循环确定取出的元素值下标
        for (int i = 1; i < a.length; i++) {
            //preIndex:为记录当前下标i需要从后往前的下标值
            preIndex = i - 1;
            //取出本次循环最后一个下标i的元素值
            current = a[i];
            //当比较的preIndex值还没越界,并且下标preIndex的元素值大于本次比较值current时
            //preIndex下标元素值后移,同时preIndex--,继续比较下一次
            while (preIndex >= 0 && a[preIndex] > current) {
                a[preIndex + 1] = a[preIndex];
                preIndex--;
            }
            //当preIndex检索的值已经移动完毕或者没有移动,需要将当前比较的current值重新插入序列中
            a[preIndex + 1] = current;
        }
    }
}

五、结果值查看

原序列:
53 68 32 96 58 12 25 68 99 
排序后:
12 25 32 53 58 68 68 96 99 


 

猜你喜欢

转载自blog.csdn.net/qq_38741971/article/details/81662860