插入排序(java)
英文:insertSort
原理:整个区间被分为
- 有序区间
- 无序区间
每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入
时间复杂度:
稳定性:稳定
插入排序,初始数据越接近有序,时间效率越高。
实现:
public static void insertSort(int[] arr) {
int bound = 1;
//[0, bound) 是已排序区间
//[bound, length) 待排序区间
for(; bound < arr.length; bound++){
//里面就要执行具体的比较插入的过程了
//取出待排序区间的最开始元素
int v = arr[bound];
int cur = bound - 1;
for(; cur >= 0; cur--){
//这个循环就是在执行比较插入的细节
//拿着 v 这个值依次往前进行比较,找到合适的位置
if(arr[cur] > v){
//说明 v 应该插入到 arr[cur] 之前
//于是就得把 cur 位置的元素往后搬运一个格子
arr[cur + 1] = arr[cur];
}else{
//说明已经找到合适的位置,结束循环
break;
}
}
arr[cur + 1] = v;
}
}
验证main函数
public static void main(String[] args) {
int[] arr = { 2,4,6,1,3,50,9,5,3,1};
insertSort(arr);
System.out.println(Arrays.toString(arr));
}