插入排序法思想
把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素,排序过程中每次从无序表取出第一个元素,把它的排序码(值大小)依次与有序表元素的排序码进行比较,将它插入到有序表中适当的位置,使之成为新的有序表
插入排序思路图

代码实现
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args){
int[] arr={12,4,45,3,56,7,5,67,78,-3,0};
insertSort(arr);
System.out.println(Arrays.toString(arr));//[-3, 0, 3, 4, 5, 7, 12, 45, 56, 67, 78]
}
public static void insertSort(int[] array){
int insertVal=0;
int insertIndex=0;
for(int i=1;i<array.length;i++){
//定义待插入的数
//由于第一个数独自成为一个有序表,因此下标i从1开始往有序表中插入数据
insertVal=array[i];
insertIndex=i-1;//即array[i]的前面这个数的下标
/*给insertVal找到插入的位置
* 说明
* 1.insertIndex>=0 保证在给insertVal找到合适的插入位置,不越界
* 2.如果insertVal<array[insertIndex]待插入的数,说明还没有找到插入位置
* 3.需要将array[insertIndex]后移
* */
while(insertIndex>=0&&insertVal<array[insertIndex]){
array[insertIndex+1]=array[insertIndex];
insertIndex--;
}
//当退出while循环时,说明找到了插入的位置,insertIndex+1
//判断是否需要赋值
if(insertIndex+1!=i){
array[insertIndex+1]=insertVal;
}
}
}
}
69万+

被折叠的 条评论
为什么被折叠?



