您的位置:首页 > 其它

排序算法之直接插入排序

2016-01-18 13:23 267 查看
直接插入排序是最直观的一种排序方式,记忆力小时候就是用这种方式来对几个数排序的,我们最熟悉的抓取扑克牌用的就是直接插入排序算法。

少废话,先看代码

public class InsertSort {
public static void main(String[] args) {
int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
sort(array);
printArray(array);
}

public static void sort(int[] array) {
if (array == null || array.length < 2)
return;
for (int i = 1; i < array.length; i++) {
int currentValue = array[i];
int position = i;
for (int j = i - 1; j >= 0; j--) {
if (array[j] > currentValue) {
array[j + 1] = array[j];
position--;
} else {
break;
}
}
array[position] = currentValue;
snp(array);
}
}

public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.println("array[" + i + "] = " + array[i]);
}
}

public static void snp(int[] arrays) {
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");

}
System.out.println();
}
}


输出结果

array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5
array[5] = 6
array[6] = 7
array[7] = 8
array[8] = 9


原理

将数组分为有序部分和无序部分,0到i - 1个元素为有序部分,i 到max length元素为无序部分,把第i个元素依次与第i - 1到第0个元素比较大小,找到一个position,position左侧元素比第i个元素要小,右侧元素比第i个元素要大,将第i个元素放置在此,依次将第i + 1到max length元素按此种排序找到对应position并放置,完成整个排序算法。

模拟动画



时间复杂度

T(n) = O(n^2),属于稳定排序算法之一。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: