1、算法核心
对数组中的元素进行遍历,从第二个元素开始,遇到的数值小的,把这个数值前面的数字向后面移动一个单位,占掉小数字的位置,出现了一个空的位置,最终这个空的位置,继续移动到达合适的位置,这个位置就是给前面的小数值留下的;
2、实现代码
package com.luobin.DataStructure.排序;
public class Insert {
public static void main(String[] args) {
int[] testInsert = new int[]{0, 1, 2,9,3,2,1};
insertionSort(testInsert);
}
public static int[] insertionSort(int[] array) {
int len;
if(array == null || (len = array.length) == 0 || len == 1) {
return array;
}
int current;
for (int i = 0; i < len - 1; i++) {
current = array[i + 1];
int preIdx = i;
while (preIdx >= 0 && current < array[preIdx]) {
array[preIdx + 1] = array[preIdx];
preIdx--;
}
array[preIdx + 1] = current;
}
for (int i = 0;i < array.length;i++) {
System.out.println("进行排序之后的算法是:" + i);
}
return array;
}
}
3、性能分析
时间复杂度:O(n^2) 性能分析的工具可以使用,下图中的渐进紧确界,渐进上界,渐进下界进行表示,通常使用的是渐进上界即可,因为渐进上界可以代表最坏的运行结果
|