Demo06.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import java.util.Arrays;
  2. /**
  3. * @author WanJl
  4. * @version 1.0
  5. * @title Demo06
  6. * @description 数组排序-插入排序
  7. * @create 2026/7/16
  8. */
  9. public class Demo06 {
  10. /*
  11. 插入排序
  12. 是三种基础排序中最实用的一种,也是使用最广泛的一种O(n2)排序算法,他的思想非常符合人整理东西的习惯。
  13. 把数组分为“已排序”和“未排序”两部分,每次从未排序部分 取一个元素,插入到已排序部分的正确位置。
  14. 就类似于 打扑克 时,抓牌然后 插入到手中已排序好的牌中正确的位置。
  15. 核心思想:
  16. 把数组视为“已排序”(前部分)和未排序(后部分)。每次从未排序部分中拿取第1个元素,
  17. 从后往前在已排序部分中找到合适的位置(比较)并插入
  18. */
  19. public static void main(String[] args) {
  20. /*
  21. 插入排序
  22. 把数组分为两部分:已排序、未排序
  23. 每次取未排序的第1个元素插入到已排序的正确位置
  24. */
  25. int[] arr={1,456,782,5,8,4,598,1,46,68,465,74};
  26. //我们要从第2个元素开始,到长度减1,这个区间,暂时假定为未排序区间
  27. //从第2个元素开始,假设 arr[0]已经是已排序部分
  28. for (int i = 1; i <arr.length; i++) {
  29. //获取当前要插入的元素,未排序的第1个
  30. int current=arr[i];
  31. //已排序部分的最后一个索引值
  32. int j=i-1;
  33. //从后往前扫描已经排序部分,寻找插入位置
  34. //如果已排序的元素大于current,就向后移动一位。
  35. while (j>=0&&arr[j]>current){
  36. arr[j+1]=arr[j];
  37. j--;
  38. }
  39. //这个时候 j+1 就是current应该插入到的位置
  40. arr[j+1]=current;
  41. System.out.println("第"+(i)+"轮插入后:"+ Arrays.toString(arr));
  42. }
  43. }
  44. }