1. 插入排序原理图:
算法步骤:
1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。
2. 插入排序的代码实现:
1 package cn.itcast; 2 3 /* 4 * 插入排序基本思想 5 * 将n个元素的数列分为已有序和无序两个部分,如插入排序过程示例下所示: 6 * {{a1},{a2,a3,a4,…,an}} 7 * {{a1,a2},{a3,a4 …,an}} 8 * {{a1(n-1),a2(n-1) ,…},{an(n-1)}} 9 * 每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较, 10 * 找出插入位置,将该元素插入到有序数列的合适位置中。 11 */ 12 public class InsertSort { 13 public static void sort(int[] data) { 14 for (int i = 1; i < data.length; i++) { 15 for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) { 16 swap(data, j, j - 1); 17 } 18 } 19 20 } 21 22 /* 23 * 交换数组中的两个元素 24 */ 25 public static void swap(int[] data, int i, int j) { 26 int temp = data[i]; 27 data[i] = data[j]; 28 data[j] = temp; 29 } 30 }
3. 插入排序的示例代码,如下:
1 /* package whatever; // don't place package name! */ 2 3 import java.util.*; 4 import java.lang.*; 5 import java.io.*; 6 7 /* Name of the class has to be "Main" only if the class is public. */ 8 class Ideone 9 { 10 public static void main (String[] args) throws java.lang.Exception 11 { 12 int[] array = new int[] {12, 33, 4, 15, 25, 55, 18}; 13 14 sort(array); 15 printArray(array); 16 } 17 18 public static void sort(int[] data) { 19 for (int i = 1; i < data.length; i++) { 20 for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) { 21 swap(data, j, j - 1); 22 } 23 } 24 25 } 26 27 public static void swap(int[] data, int i, int j) { 28 int temp = data[i]; 29 data[i] = data[j]; 30 data[j] = temp; 31 } 32 33 public static void printArray(int[] array) { 34 35 System.out.print("["); 36 37 int i; 38 for(i= 0; i<array.length; i++) { 39 40 if(i ==array.length-1) { 41 System.out.print(array[i]); 42 } else { 43 System.out.print(array[i]+","); 44 } 45 } 46 System.out.print("]"); 47 48 } 49 }
运行程序,如下: