打扑克就是插入排序的典型例子,特别经典
将数据分为两部分,一部分是排好序的,另外一部分是无序,把无序的数据一个一个插入到排好序的序列中。
时间复杂度:O(n^2) 稳定性:稳定
实现步骤:
- 将数组分成已排序段和未排序段,最开始时已排序段只有一个元素;
- 从未排序段取出元素插入到已排序段,并保证插入后仍然有序;
- 重复执行1、2步操作,直到未排序段元素全部排完。
代码实现:
public static void insertionSort(int [] arr){
int len = arr.length;
//i从1开始,因为最开始的时候,第一个元素步需要排序
for (int i = 1; i < len; i++) {
int data = arr[i];
//从数组的后面往前比较,这样我们只需要交换两个数的位置
//如果从数组前面开始比较,涉及到数据的整体移位
int j = i - 1;
while (j >= 0) {
if(arr[j] > data){
arr[j + 1] = arr[j];
}else {
break;
}
j --;
}
arr[j + 1] = data;
}
//输出排序结果
for (int i = 0; i < len; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}