插入排序法
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置
Java代码实现
public class InsertionSort {
/** * @param args */
public static void main(String[] args) {
int[] data = new int[]{5,1,6,2,7,8,9,3,4};
int j;
for (int i = 1; i < data.length; i++) { //i 表示第N趟
// 要插入的新数据
int temp = data[i];
//只考虑排好序的数据(此处表示数组中左边的数据),为排好序的 数据表示是等待插入的数据
for (j = i; j > 0 && temp < data[j-1]; j--) {
data[j] = data[j-1];
}
data[j] = temp;
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
}
解析:
原始数据: 5,1,6,2,7,8,9,3,4(有序序列 5 待插入排序序列 1,6,2,7,8,9,3,4)
第1趟 : 1,5,6,2,7,8,9,3,4(有序序列 1,5 待插入排序序列 6,2,7,8,9,3,4)
第2趟 : 1,5,6,2,7,8,9,3,4(有序序列 1,5,6 待插入排序序列 2,7,8,9,3,4)
第3趟 : 1,2,5,6,7,8,9,3,4 .
第4趟 : 1,2,5,6,7,8,9,3,4.
第5趟 : 1,2,5,6,7,8,9,3,4.
第6趟 : 1,2,5,6,7,8,93,4.
第7趟 : 1,2,3,5,6,7,8,9,4.
第8趟 : 1,3,4,5,6,,7,8,9.
时间复杂度: T(N^2) 2+3+4+...+n