1、核心思想:
空
2、时间复杂度:O(n^2)
3、稳定性:稳定
4、空间复杂度:O(n)
5、上代码:
public static void main(String[] args) {
int[] array = new int[]{12,9,1,6,2,3,91,41,31};
array = insertSortAsc(array);
for(int data: array){
System.out.print(data+" ");
}
}
/**
*
1、将数组分成已排序段和未排序段,初始化已排序段只有第一个元素
2、将未排序段的元素在已排序段中找到位置,在找位置的同时将已排序段"该元素位置"的后面元素的位置后移
3、将未排序段的元素依次插入已排序段,以保证插入后仍然有序
4、重复将未排序段的元素在已排序段插入到对应位置,直到未排序段的元素全部加完
* @param array
* @return
*/
private static int[] insertSortAsc(int[] array){
// 数组长度
int length = array.length;
// i即为区分已排序段和未排序段的分隔下标
// 第一个数默认为已排序元素,从第二个元素开始作为未排序段的开始元素
for(int i=1;i<length;i++){
// 当前待插入到已排序段的元素
int data = array[i];
// 已排序段的末位下标
int j = i - 1;
// 从已排序段的末尾开始比较,从后往前比较并进行移位
for(;j>=0;j--){
// 当待插入段的元素比前一个元素小,则将前一个元素往后移位
if(data < array[j]){
array[j+1] = array[j];
}else{
// 当待插入段的元素不比前一个元素小了,移位循环结束
break;
}
}
// 将当前待插入到已排序段的元素插入到已排序段的对应位置
array[j+1] = data;
}
return array;
}
/**
*
1、将数组分成已排序段和未排序段,初始化已排序段只有第一个元素
2、将未排序段的元素在已排序段中找到位置,在找位置的同时将已排序段"该元素位置"的后面元素的位置后移
3、将未排序段的元素依次插入已排序段,以保证插入后仍然有序
4、重复将未排序段的元素在已排序段插入到对应位置,直到未排序段的元素全部加完
* @param array
* @return
*/
private static int[] insertSortDesc(int[] array){
// 数组长度
int length = array.length;
// i即为区分已排序段和未排序段的分隔下标
// 第一个数默认为已排序元素,从第二个元素开始作为未排序段的开始元素
for(int i=1;i<length;i++){
// 当前待插入到已排序段的元素
int data = array[i];
// 已排序段的末位下标
int j = i - 1;
// 从已排序段的末尾开始比较,从后往前比较并进行移位
for(;j>=0;j--){
// 当待插入段的元素比后一个元素大,则将前一个元素往后移位
if(data > array[j]){
array[j+1] = array[j];
}else{
// 当待插入段的元素不比前一个元素小了,移位循环结束
break;
}
}
// 将当前待插入到已排序段的元素插入到已排序段的对应位置
array[j+1] = data;
}
return array;
}
6、打印结果:
1 2 3 6 9 12 31 41 91
Process finished with exit code 0
***看懂了喜欢的可以点个赞哦,后续还会出新的笔记分享,谢谢大家!
以上内容欢迎评论,欢迎指正。