已知一个数组 60、28、41、39、6 、18 、14、28、49、31 利用插入排序算法进行排序
插入排序是一个运行时间为O(N²)的排序算法。
算法思想
60、28、41、39、6 、18 、14、28、49、31 数组元素
0、 1、 2、 3、 4、 5、 6、 7、 8、 9 数组下标
先将index[0]与index[1]有序,可视为index[1]为那个 插入元素
其次将index[0]、index[1]、index[2]有序,将index[2]视为 插入元素
再其次将index[0]、index[1]、index[2]、index[3]有序,将index[3]视为 插入元素
...........
插入排序始终保持数组左侧有序,将下标从左往右依次移动,使得数组依次有序。因此对于 数组在排序之前就局部有序, “插入排序的效率将会提高”会比冒泡排序更好。
以下采用java实现
public class InsertOrder {
private int[] Array;
private int index;
private int maxIndex;
public InsertOrder(int size) {
this.Array = new int[size];
this.index = 0;
this.maxIndex = size-1;
}
public void insert(int i) {
if(this.maxIndex<this.index) {
System.out.println("数组已满");
}else {
this.Array[this.index++] = i;
}
}
public void order() {
for(int i=1; i<=this.maxIndex;i++) {
int temp = this.Array[i];//插入值
int tempIndex = i;
while(tempIndex>0&&this.Array[tempIndex-1]>temp) {
this.Array[tempIndex] = this.Array[tempIndex-1];
tempIndex=tempIndex-1;
}
this.Array[tempIndex]=temp;
}
}
public void show() {
for (int i : Array) {
System.out.println(i);
}
}
}
最终结果6、14、18、28、28、31、39、41、49、60