八大排序之插入排序
数据结构排序算法可视化网址:https://visualgo.net/zh/sorting
直接插入排序
基本思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。
插入排序默认前面的序列已经是排好的,从第一个开始,当前的元素依次和前面的数比较,直到找到自己的位置插入去,而比这个元素大的就会往后移
代码实现:
public class InsertSort {
public static void main(String[] args) {
int []arr = new int[]{2,4,0,1,8,4,2,8,0,4,7,5};
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
//插入排序
public static void insertSort(int []arr){
//从数组的第二个元素开始比较
for (int i = 1; i < arr.length; i++) {
//因为插入排序中,已经默认了前面的顺序都是排好的,所以只用比较当前元素和该元素的前一个的大小
//如果当前的元素比上一个元素小,那么就用一个临时变量保存起来
while(arr[i] < arr[i-1] ){
int temp = arr[i];
int j;
//和当前元素之前的元素比较,如果比该元素大的,通通往后移,直到找到指定的位置,如果没有元素比当前元素大,那么就直接插在原地。
for(j = i-1; j >= 0 && arr[j] > temp;j--){
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
}
}
}