插入排序是一种简单直观且稳定的排序算法。
插入排序的工作方式:
- 类似于我们在斗地主的是拿扑克牌,第一张默认是排好序的直接拿即可,再拿第二张如果比第一张小就会把第二张放在第一张的前面,以此类推,每次拿的牌如果比前一张小,就将其向前插,直到一手的牌都有序。
排序原理
- 把所有元素分为两组,已经排序的和未排序的;
- 第一从首元素开始遍历,默认第一个元素是有序的,而后面都未排序。
- 向后遍历,每次遍历一个就与前面已排好序组的开始从后向前比较(倒叙比较),直到找到其对应的插入位置。
- 如果插入的位置是原已排好序组之间的位置,则其后面原有序的元素都要向后移动一位。
如下图:
代码实现:
public static void main(String[] args) {
int arr[] = new int[10];
System.out.println("遍历前:");
for (int i = 0; i < arr.length; i++) {
arr[i] = new Random().nextInt(10);
System.out.print(arr[i]+"\t");
}
System.out.println("\n遍历后:");
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0 ; j--) {
if (arr[j]<arr[j-1]){
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
else {
break;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
运行结果: