JAVA排序之直接插入排序
基本思想
数组的第一个元素默认为有序,则将此数组分为两部分,第一部分为有序部分,初始时只有一个元素,除第一个元素之外的其它元素均为无序元素,称之为待排序部分;
将待排序部分的第一个元素,与已排好序的元素从后往前相比较,先设置一个关键字保留待排序部分的值,如果关键字的值比有序部分的最后一个元素数值大,则不必移动元素,默认为有序,有序部分元素个数加一;
如果关键字的数值比有序部分的最后一个数值小,则将有序部分的元素依次往后移动,直到关键字的值比有序部分的某一位元素的值大为止,然后将此关键字插入;
每一次排序,有序部分的元素个数就增加一个,待排序部分的元素就相对减少,直到无序部分的元素个数为零,则排序结束此时得到一个有序序列
特点:
是一种稳定排序
时间复杂度
平均值为O(n^2)
最坏情况下为O(n^2)
最好情况下为O(n)
空间复杂度为O(1)(即只需要一个空间存储关键字)
java代码实现
public class demo03 {
public static void main(String[] args) {
int[] a = {6,2,4,3,1,0,5,9,7};
int j;
for(int i = 1;i < a.length;i++) {
if(a[i] < a[i-1]) {
int temp = a[i];
for(j = i - 1;j >= 0 && a[j] > temp;j--) {
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
for(int i = 0;i < a.length;i++) {
System.out.print(a[i]+ " ");
}
}
}
小结
直接插入排序运用的思想较为简单,代码也不复杂,运用数组,可以简单快速的实现这一排序算法