版权声明:本文为博主原创文章,如果喜欢,欢迎转载!!!https://blog.csdn.net/qq_3881217
1.直接插入排序思想:
已知一组无序序列,现在要将它们排序,直接插入的办法就是,从第二个数开始,依次与前面的有序序列进行比较(默认序列的第一个数已有序),找到 current number 的插入位置,并通过循环处理,将插入位置后面的元素依次向后移动一位,目的是为了给当前元素腾出一个空位,然后将当前待插入元素直接插入就行了。
注意:
注意,我们在为当前元素腾空位时,需要向后移动一位,这就是使得当前元素的位置将会被有序序列最后一个移出来的元素占领,从而找不到当前元素。所以,我们设置了一个“哨兵”元素,将每次待排序的当前元素的值暂存在“哨兵关卡”里!这样就不会出错了。
2.过程图解析:
$ 不断扩大有序序列
$ finding -- moving -- inserting
$ set R[0] as sentinel point to storage current number
3.Source Code implemented with Java
package com.insertSort.utils;
public class InsertSort {
private static int[] arr = {0,5,8,9,2,4,3}; //test array demo
/**
* direct insertion sort from the lower to higher.
*
* @param numArray is the integer number array which is unsorted.
*/
public void insertionSort(int[] numArray)
{
for(int i=1;i<numArray.length;i++) //expend sorted sequence step by step
{
if(numArray[i]<numArray[i-1]) //if current number is bigger than the previous, go to next circle
{
numArray[0] = numArray[i]; //1.using numArray[0] as a sentinel point to storage current number
int j;
for(j=i-1;numArray[j]>numArray[0];j--) //2.find out the right position where inserting current number.
numArray[j+1] = numArray[j]; //3.moving larger numbers
numArray[j+1] = numArray[0]; //4.insert current numbers
}
}
}
public static void main(String[] arg) { //main method's calling
int[] arr = {0,5,8,9,2,4,3};
InsertSort directSort = new InsertSort();
System.out.println("original array:");
for (int i=1;i<arr.length;i++)
System.out.print(arr[i]+" ");
directSort.insertionSort(arr);
System.out.println("\n\nAfter insertionSort: ");
for (int i=1;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
}