排序算法学习笔记

  • 算法复杂度

  • 算法详解
  1. 冒泡排序
     1     /**
     2      * 冒泡
     3      * @param arr
     4      * @return
     5      */
     6     public static int[] maopao(int[] arr){
     7         System.out.println(Arrays.toString(arr));
     8         int length = arr.length;
     9         for (int i = 0; i < length - 1; i++) {
    10             for (int j = 0; j < length - 1 - i; j++) {
    11                 if (arr[j] > arr[j+1]) { // TODO 在每一次的交换过程中将最大的数字逐渐冒泡沉底到最后面,所以在优化中循环的判断条件 -i -1
    12                     int tmp = arr[j];
    13                     arr[j] = arr[j+1];
    14                     arr[j+1] = tmp;
    15                 }
    16             }
    17         }
    18         System.out.println(Arrays.toString(arr));
    19         return arr;
    20     }
    View Code
  2. 选择排序(贪心算法:每一步骤的最优解)
     1     /**
     2      * 选择
     3      */
     4     public static int[] xuanze(int[] arr) {
     5         System.out.println(Arrays.toString(arr));
     6         int length = arr.length, mid, tmp;
     7         for (int i = 0; i < length - 1; i++) {
     8             mid = i;
     9             for (int j = i + 1; j < length; j++) {
    10                 if (arr[j] < arr[mid]) { // TODO 找出最小的数的索引 然后和当前位置的数据进行交换
    11                     mid = j;
    12                 }
    13             }
    14             tmp = arr[mid];
    15             arr[mid] = arr[i];
    16             arr[i] = tmp;
    17         }
    18         System.out.println(Arrays.toString(arr));
    19         return arr;
    20     }
    View Code
  3. 插入排序
     1     /**
     2      * 插入
     3      */
     4     public static int[] insertSort(int[] arr) {
     5         System.out.println(Arrays.toString(arr));
     6         int length = arr.length;
     7         for (int i = 1; i < length; i++) {
     8             int preIndex = i - 1; // TODO 移动交换标记
     9             int current = arr[i]; // 当前位置值
    10             // TODO 1.如果preIndex大于等于0 继续向前交换
    11             // TODO 2.交换标记值大于当前位置值,继续向前交换,直到当前值被放到前面没有比它大的位置
    12             // TODO 3.实质前面的序列始终是一个从小到大的有序序列
    13             while (preIndex >= 0 && arr[preIndex] > current) {
    14                 arr[preIndex + 1] = arr[preIndex];
    15                 preIndex--;
    16             }
    17             // 将当前值放到序列中该有的位置
    18             arr[preIndex + 1] = current;
    19         }
    20         System.out.println(Arrays.toString(arr));
    21         return arr;
    22     }
    View Code
  4. 希尔排序
  5. .
posted @ 2022-07-01 17:00  戒吧老哥助我一臂之力  阅读(11)  评论(0编辑  收藏  举报
跟随粒子特效