一.插入排序的描述
插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。 按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。
就像打扑克一样 ,手中的牌是有顺序的,后加入的插入到对应的位置
二.思路
把待排序的元素看为两部分 开始时前部分只有一个元素 ,这是有序的,下一次加入一个时,判断它的位置 ,然后插入 ,知道后半部分元素全部插入到有序的部分就结束;
相当于把数组前部分为一个元素 ,逐个加入,加入时并排序
三.代码实现
-
package c06Sort;
-
-
import java.util.Arrays;
-
-
public
class
InsertSort {
-
-
public
static
void
main
(String[] args) {
-
int arr[] = {
33,
5,
2,
9,
1,
3,-
1,
43,
98,
45,
7};
-
System.out.println(
"排序前的数组");
-
System.out.println(Arrays.toString(arr));
-
-
insertSort(arr);
-
System.out.println(
"排序后的数组");
-
System.out.println(Arrays.toString(arr));
-
}
-
-
-
public
static
void
insertSort
(int []arr) {
-
//从第二个数开始,,第一个已经独立有序了
-
int
insertVal
=
0;
//取出下一个要插入的数据 ,保存下来
-
int
insertIndex
=
0 ;
// 要插入的下标
-
for(
int i=
1;i<arr.length;i++) {
-
-
insertVal=arr[i];
-
insertIndex=i-
1;
//待插入的数 前一个位置
-
//给待插入的数找位置;
-
while(insertIndex >=
0 && insertVal < arr[insertIndex]) {
-
//如果前一个位置是要插入的 向后移;
-
arr[insertIndex+
1]=arr[insertIndex];
-
insertIndex--;
-
}
-
-
//这是表示找到了位置 是要插入的前一个 插入时要加1;;
-
arr[insertIndex+
1]=insertVal;
//插入数
-
}
-
-
}
-
}
四.结果
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树leetcode-排序算法493-翻转对
20361 人正在系统学习中