过去读书的时候因为脑子不好使,很多概念,公式,算法都记不住,等长大了,营养赶上来了,才学习的时候就会觉得更加的深刻。就像平常我们打扑克牌一样,我们总是在别人发牌的时候,拿到一张牌就把它插到合适的位置上,这个过程中我们的肉眼和大脑做了3件事
1、拿到新的牌,检查这张牌的数值是多少(从数组里面获取新的元素)
2、从手上的牌里面检索新加入的牌应该插入的位置(检索当前元素插入的位置)
3、手指张开一点,对手上的牌进行扩容(对已排序数组进行扩容,扩容期间需要对元素进行移位)
有了这些战略上的指导,我们就可以进行代码实现了:
public int[] InsertSort(int[] array){
//第一个元素作为哨兵
int key = array[0];
for(int i=1;i<array.length;i++){
for (int j = 0; j <= i; j++) {
if (array[j] > array[i]){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
return array;
}
直接排序
算法特点
时间复杂度为O(n^2),空间复杂度为O(1),比较适用于数据集合基本有序的情况,这样子时间复杂度约为O(n),否则,当n越大,时间复杂度就越高,效率低。
网友评论