zoukankan      html  css  js  c++  java
  • 基本排序算法的总结

    # 插入排序

        public static int[] insertSort2(int[] arr) {
            if (arr.length < 2 || arr == null) {
                return arr;
            }
            // 假设刚开始数组中只存在一个数,从第二个数开始插入
            for (int i = 1; i < arr.length; i++) {
                // 记录当前插入的数的值
                int current = arr[i];
                // 从当前数的前一位进行比较,一直比较到 arr[0]
                for (int j = i - 1; j >= 0; j--) {
                    // 如果插入数小于比较数,比较数向后移动一位(index+1),插入数占据比较数的位置
                    if (arr[j] > arr[j + 1]) {
                        arr[j + 1] = arr[j];
                        arr[j] = current;
                    }
                }
            }
            return arr;
        }

     # 选择排序

        public static void selectSort(int[] arr) {
            if (arr.length == 1 || arr == null) {
                return;
            }
    
            for (int i = 0; i < arr.length; i++) {
                // 假设当前的数是最小数
                int minIndex = i;
                // 向后遍历,找到最小的数
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[j] < arr[minIndex]) {
                        // 如果遇到更小的数,让minIndex=它的index
                        minIndex = j;
                    }
                }
                // 当前数和最小数换位置
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }

     # 归并排序

        public static void mergeSortRecur(int[] arr, int left, int right) {
            if (left == right) {
                return;
            }
            int mid = (left + right) / 2;
            mergeSortRecur(arr, left, mid);
            mergeSortRecur(arr, mid + 1, right);
            merge(arr, left, mid, right);
        }    
    
        public static void mergeSortIter(int[] arr, int len) {
            int left, mid, right;
            for (int i = 1; i < len; i *= 2) {
                left = 0;
                while (left + i < len) {
                    mid = left + i - 1;
                    right = mid + i < len ? mid + i : len - 1;
                    merge(arr, left, mid, right);
                    left = right + 1;
                }
            }
        }
    
        private static void merge(int[] arr, int left, int mid, int right) {
            int[] tmp = new int[right - left + 1];
            int i = left;
            int j = mid + 1;
            int index = 0;
            while (i <= mid && j <= right) {
                if (arr[i] < arr[j]) {
                    tmp[index++] = arr[i++];
                } else {
                    tmp[index++] = arr[j++];
                }
            }
            while (i <= mid) {
                tmp[index++] = arr[i++];
            }
            while (j <= right) {
                tmp[index++] = arr[j++];
            }
            for (int k = 0; k < tmp.length; k++) {
                arr[left++] = tmp[k];
            }
        }
  • 相关阅读:
    【Nginx+Tomcat】高性能负载均衡的Tomcat集群
    【JS-Excel】使用JS导出表格数据、附带解决科学计数法等问题
    【Util】日期工具类总结
    【SpringMVC】url映射传参
    【Linux+Windows】Linux,Windows打包发布到Tomcat并修改映射的ip地址
    【Spring】解决返回json乱码问题
    【API】高德地图API JS实现获取坐标和回显点标记
    ELK-Python(二)
    ELK-Python(一)
    zookeeper集群
  • 原文地址:https://www.cnblogs.com/lwmp/p/9812146.html
Copyright © 2011-2022 走看看