应用场景
对于少量元素的排序,他是一个有效的算法
工作方式(比喻):
桌子上有很多牌,左手从中任意抽取一张,插入右手已排好序的牌组中
实现过程
桌上有牌 [5,2,4,6,1,3] 右手无牌
左手抽第一张 5 放于右手, 此时右手 [ 5 ] ,桌上[2 , 4 , 6 , 1 , 3 ]
下一趟 抽 2 ,2比5小 放于 5 前 此时右手[2,5 ]
下一趟 4 比2大 比5小 放于2,5的中间 此时右手[2 , 4 ,5 ]
下一趟 6 大于2,4,5 不动 此时右手[2 , 4 , 5 , 6 ]
下一趟1 小于 2 ,放在 2 前面 ,此时右手[1 , 2 , 4 , 5 , 6 ]
最后一趟 3 大于2 小于4 放在 2,4中间
此时右手牌[1,2,3,4,5,6] 排序完成
Java代码实现
import java.util.Arrays;
public class arrtest {
public static void main(String[] args) {
int[] arr = new int[]{5,2,4,6,1,3};
for(int j = 1;j<arr.length;j++){ //循环的趟数
int key = arr[j];
int i = j-1; //从待插入元素的前一个开始比较
while(i >= 0 && arr[i] > key){ //比较是否比所定位元素大,若小就一直往前,直到比其大为止
arr[i+1] = arr[i]; //把该元素往后移一位
i--; //再往前比较
}
arr[i+1] = key; //将该元素插入
System.out.println("第"+j+"趟"+Arrays.toString(arr)); //输出该趟结果
}
System.out.println("最后结果"+Arrays.toString(arr)); //输出最终结果
}
}
输出
第1趟[2, 5, 4, 6, 1, 3]
第2趟[2, 4, 5, 6, 1, 3]
第3趟[2, 4, 5, 6, 1, 3]
第4趟[1, 2, 4, 5, 6, 3]
第5趟[1, 2, 3, 4, 5, 6]
最后结果[1, 2, 3, 4, 5, 6]
时间复杂度
O(n2)
详情请见:https://blog.youkuaiyun.com/zjs_scallop/article/details/105073725