直接插入排序的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
假设我们要对43,21,87,15,20五个数进行排序。从小到大排序,越大的越靠后。
首先我们把第1个数43做为有序表,剩下的21,87,15,20是无序表。先把21取出来,因为43大于21,交换43和21的位置。此时有序表为21,43。无序表为87,15,20。
然后开始第二趟,取出无序表中的87,因为21和43都小于87,顺序保持不变。此时有序表为21,43,87。无序表为15,20。
接着开始第三趟,取出无序表中的15,15在有序表中最小,需要把15插入到有序表的最前面,此时有序表为15,21,43,87。无序表为20。
最后一趟,取出无序表中的20,20应该插入到有序表15和21之间,所以最终的顺序为15,20,21,43,87。
以最后一趟为例,在程序中如何实现呢:在进行到最后一趟时,有序表为15,21,43,87。无序表为20。先倒序查找小于20的位置,87大于20,继续找,43大于20,继续找,21大于20,继续找,15小于20,那么应该把20,插入到15之后。怎么插入呢,先倒序移位,移位前为15,21,43,87,20。把87移到20的位置,43移到87的位置,21移到43位置。这时的顺序为15,21,21,43,87。最后把无序表中的20放到第一个21的位置即可。最终的顺序就是15,20,21,43,87。
接下来,我们看下如何实现。
完整java代码如下,该示例会接收5个数字,并将这5个数字用插入排序法进行排序输出:
public class Test5 {public static void main(String[] args) { int arr[] = new int[5]; Scanner input = new Scanner(System.in); for(int i=0;i<5;i++) { int num = Integer.parseInt(input.nextLine()); arr[i] = num; } input.close(); int i=0,j=0,k=0; for(i=1;i<5;i++) { for(j=i-1;j>=0;j--) { if(arr[j]j;k--) { arr[k+1]=arr[k]; } arr[k+1]=temp; } } for(i=0;i<5;i++) { System.out.println(arr[i]); }}}