插入排序法介绍
插入式排序属于内部排序法,是对于排序的元素的方式找寻该元素的适当位置,以达到排序的目的。
插入排序法思想
插入排序的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
代码实现
public class charu {
public static void main(String[] args) {
int[] arr = {101,34,119,1,-1,80};
insertSort(arr);
}
private static void insertSort(int[] arr) {
//插入排序的思路
//1.将数组的第一个值看成一个有序的表 ,从数组的第二个值开始进行插入
//2.如果插入的值 小于有序表中的值,就将有序表中的值往后移
//3. 直到插入所有值
for (int i = 1; i < arr.length; i++) {
int insertValue = arr[i]; //要插入的值
int insertIndex = i-1; //要插入中的前一个位置
// insertIndex>=0 保证在给insertValue找插入位置的 不越界
insertIndex< arr[insertIndex] 如果待入职小于有序表中的值 就代表着还没有找到插入的位置
//while循环的插入排序
while (insertIndex>=0 && insertValue< arr[insertIndex]){
//使有序表中的位置往后移
arr[insertIndex+1] = arr[insertIndex];
//待插入值 在与有序表中的前一个值比较 直到insertIndex<0 或者insertIndex>arr[insertIndex] 为止
insertIndex--;
}
//for循环的插入排序
// int index = 0;
// for (int j = insertIndex; j>=0 ; j--) {
// if(insertValue<arr[j]){
// arr[j+1] = arr[j];
// index = j;
// }else{
// index = j+1;
// break;
// }
// System.out.println(index);
// }
//循环结束 inserIndex+1 就是要插入值的位置
//while循环
arr[insertIndex+1] = insertValue;
//for循环
// arr[index] = insertValue;
System.out.printf("第%d次排序后\n",i);
System.out.println(Arrays.toString(arr));
}
}
}