zoukankan      html  css  js  c++  java
  • 排序的第一天

    归并排序与希尔排序

    希尔排序

    package com.m.suan_pai;
    
    
    import java.util.Arrays;
    
    public class Test {
        public static void main(String[] args) {
            int[] arr = {65, 45, 76, 546, 4, 5, 72, 36, 45, 72, 346, 52};
            xier(arr);
            System.out.println(Arrays.toString(arr));
            //[4, 5, 36, 45, 45, 52, 65, 72, 72, 76, 346, 546]
        }
    
        public static void xier(int[] arr) {
            //1.定义跨度
            int k = 1;
            while (k < arr.length) {
                k = k * 2 + 1;
            }
    
            do {
                k /= 2;
                for (int i = k; i < arr.length; i++) {
                    int temp = arr[i];
                    int j = i - k;
                    while (j >= 0 && arr[j] > temp) {
                        arr[j + k] = arr[j];
                        j -= k;
                    }
                    arr[j + k] = temp;
                }
            } while (k > 1);
    
        }
    
    }
    
    

    归并排序

    package com.m.suan_pai;
    
    
    import java.util.Arrays;
    
    public class Test {
        public static void main(String[] args) {
            int[] arr = {65, 45, 76, 546, 4, 5, 72, 36, 45, 72, 346, 52};
            sort(arr);
            System.out.println(Arrays.toString(arr));
            //[546, 346, 76, 72, 72, 65, 52, 45, 45, 36, 5, 4]
        }
    
        public static void sort(int[] arr) {
            int[] temp = new int[arr.length];
            sort(arr, 0, arr.length - 1, temp);
        }
    
        public static void sort(int[] arr, int left, int right, int[] temp) {
            if (left < right) {
                int mid = (left + right) / 2;
                //左分
                sort(arr, 0, mid, temp);
                //右分
                sort(arr, mid + 1, right, temp);
                //合并
                hebing(arr, left, mid, right, temp);
            }
    
        }
    
    
        public static void hebing(int[] arr, int left, int mid, int right, int[] temp) {
            //临时数组指针
            int index = 0;
            //左指针
            int i = left;
            //右指针
            int j = mid + 1;
    
            while (i <= mid && j <= right) {
                if (arr[j] > arr[i]) {
                    temp[index++] = arr[j++];
                } else {
                    temp[index++] = arr[i++];
                }
            }
    
            while (i <= mid) {
                temp[index++] = arr[i++];
            }
    
            while (j <= right) {
                temp[index++] = arr[j++];
            }
    
            index = 0;
    
            while (left <= right) {
                arr[left++] = temp[index++];
            }
        }
    }
    
    

    希尔排序核心代码,易错点

            
            int i = left;
    
            int j = mid + 1;
    
            int index = 0;
    
            while (i <= mid && j <= right) {
                if (arr[j] > arr[i]) {
                    temp[index++] = arr[j++];
                } else {
                    temp[index++] = arr[i++];
                }
            }
    
    
    
  • 相关阅读:
    iOS NSUserDefaults 存储可变数组问题
    iOS之[文件下载 / 大文件下载 / 断点下载]
    macOS 新手开发:第 2 部分
    iOS 游戏素材
    iOS 动画
    macOS 开发
    iOS 之访问权限以及跳转到系统界面
    蓝桥杯—ALGO-18 单词接龙(DFS)
    蓝桥杯—ALGO-12 幂方分解(递归递推)
    蓝桥杯—ALGO-131 Beaver's Calculator
  • 原文地址:https://www.cnblogs.com/k-class/p/13705069.html
Copyright © 2011-2022 走看看