public class StraightSort {
/**
* 插入排序:
* 思路是从右侧的未排序区域内取出一个数据,然后将它插入到已经排序区域内合适的位置上。
* 例如:5 3 4 7 2 8 6 9 1
* 首先假设最左边的5已经完成排序,所以此时只有5是已归位的数字
* 然后从待排数字中取出最左边的数字3,将它与5进行比较,如果左边的数字更大,就交换。3和5 交换。这样下去就可以了
*/
private static void insertSort(int[] arr){
//外层循环确定待比较数值
for (int i=1;i<arr.length;i++) { //必须i=1,因为开始从第二个数与第一个数进行比较
int temp = arr[i]; //待比较数值 设置数组中的第2个元素为第一次循环要插入的数据
int j = i - 1;
//内层循环为待比较数值确定其最终位置
for (;j>=0 && arr[j]>temp;j--) { //待比较数值比前一位置小,应插往前插一位
//将大于temp的值整体后移一个单位
arr[j+1] = arr[j];
}
arr[j+1] = temp; //待比较数值比前一位置大,最终位置无误
}
}
public static void main(String[] args) {
int arr[] = {11,34,66,88,67,50,43,87,99};
System.out.println("数组排序前顺序:");
for(int n : arr){
System.out.print(n+" ");
}
//直接插入排序
insertSort(arr);
System.out.println("\n数组排序后顺序:");
for(int n : arr){
System.out.print(n+" ");
}
}
}
截图: