前言:

  排序算法应该算是算法入门级的东西了,这里重新学习算法,先暂时归纳下个人对两种算法的理解。

 

插入排序:

  插入排序可以对应到现实生活中的排队去停车场停车的场景。假设某家饭店的饭菜十分好吃(流口水),导致来这里吃饭的人特别多,后面来吃饭准备停车的车排起了长队。每次只允许一辆车过去找位置,找到位置之后才允许下一辆车进入,依此类推,直到所有的车都停好。转换成专业的数学模型就是:现有一个无序数组 A[n],要想对其进行排序。我们先从一个数开始考虑,A0肯定是排好序的。现在假设有A1,那么这时候应该将A1和A0 进行比较排序。这时候假设再来A2,A2需要与前面排好队的A0、A1 再进行比较排序。这里需要注意的是在排序的过程中可能会产生数组的移动。下面是java代码实现的升序排列的整数版本:

 1 public static void main(String[] args) {
 2         int[] arr = {2, 1, 23, 22, 15, 76, 43, 36};
 3         ascInsertionSort(arr);
 4         System.out.println(Arrays.toString(arr));
 5     }
 6     
 7     /**
 8      * 升序插入排列
 9      * @param arr 传入的数组
10      */
11     private static void ascInsertionSort(int[] arr) {
12         int key = 0;
13         for (int j=1; j<arr.length; j++) {                // 因为如果只有一个元素根本不需要排序,所以带插入的元素的下边从1开始
14             key = arr[j];                                // 用key表示当前用来插入到已排序数组中的值
15             int i = j-1;
16             for (; i>=0; i--)
17             {    
18                 // 如果已排完序的数组的最后一个数比当前待插入的数小,说明不需要移动,直接break,否则需要交换两个比较值的元素的位置
19                 if (arr[i] > arr[i+1])                    
20                 {
21                     arr[i+1] = arr[i];
22                     arr[i] = key;
23                 }
24                 else
25                 {
26                     break;
27                 }
28             }
29         }
30     }
AscInsertionSort

相关文章:

  • 2022-01-23
  • 2021-06-05
  • 2021-11-26
  • 2022-03-05
  • 2022-12-23
  • 2022-02-24
  • 2022-12-23
猜你喜欢
  • 2021-06-06
  • 2021-09-26
  • 2021-04-19
  • 2022-12-23
  • 2021-07-05
  • 2021-07-06
相关资源
相似解决方案