zoukankan      html  css  js  c++  java
  • 六大排序算法(Java实现)

    package sort;
    
    import java.util.Arrays;
    
    public class SortUtils {
        public static void main(String[] args) {
            int[] arr = { 54, 26, 93, 17, 77, 31, 44, 55, 20 };
            // bubbleSort(arr);
            // travel(arr);
            // selectSort(arr);
            // travel(arr);
            // quickSort(arr, 0, arr.length-1);
            // travel(arr);
            // insertSort(arr);
            // travel(arr);
            // shellSort(arr);
            // travel(arr);
            travel(mergeSort(arr));
        }
    
        public static void travel(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
        }
    
        // 归并排序
        public static int[] mergeSort(int[] arr) {
            while (arr.length <= 1) {
                return arr;
            }
            // 二分分解
            int mid = arr.length / 2;
            int[] left = mergeSort(Arrays.copyOfRange(arr, 0, mid));
            int[] right = mergeSort(Arrays.copyOfRange(arr, mid, arr.length));
            
            // 合并
            int[] result = new int[arr.length];
            int i = 0, l = 0, r = 0;
            while (l < left.length && r < right.length) {
                if (left[l] < right[r]) {
                    result[i++] = left[l++];
                } else {
                    result[i++] = right[r++];
                }
            }
            while (l < left.length) {
                result[i++] = left[l++];
            }
            while (r < right.length) {
                result[i++] = right[r++];
            }
            return result;
        }
    
        // 希尔排序
        public static void shellSort(int[] arr) {
            for (int gap = arr.length / 2; gap > 0; gap /= 2) {
                for (int i = gap; i < arr.length; i++) {
                    for (int j = i; j >= gap; j -= gap) {
                        if (arr[j] < arr[j - gap]) {
                            int temp = arr[j];
                            arr[j] = arr[j - gap];
                            arr[j - gap] = temp;
                        }
                    }
                }
            }
        }
    
        // 快速排序
        public static void quickSort(int[] arr, int first, int last) {
            if (first >= last) {
                return;
            }
            int midValue = arr[first];
            int low = first;
            int high = last;
            while (low < high) {
                while (low < high && arr[high] >= midValue) {
                    high--;
                }
                arr[low] = arr[high];
                while (low < high && arr[low] < midValue) {
                    low++;
                }
                arr[high] = arr[low];
            }
            arr[low] = midValue;
            quickSort(arr, first, low - 1);
            quickSort(arr, low + 1, last);
        }
    
        // 插入排序
        public static void insertSort(int[] arr) {
            for (int i = 1; i < arr.length; i++) {
                for (int j = i; j > 0; j--) {
                    if (arr[j - 1] > arr[j]) {
                        int temp = arr[j - 1];
                        arr[j - 1] = arr[j];
                        arr[j] = temp;
                    } else {
                        break;
                    }
                }
            }
        }
    
        // 选择排序
        public static void selectSort(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[i] > arr[j]) {
                        int temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
        }
    
        // 冒泡排序
        public static void bubbleSort(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                boolean flag = true;
                for (int j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        flag = false;
                    }
                }
                if (flag) {
                    break;
                }
            }
        }
    }
  • 相关阅读:
    学习进度笔记
    博雅数据机器学习07
    学习进度笔记
    博雅数据机器学习06
    《一级架构师》阅读笔记
    学习进度笔记
    博雅数据机器学习05
    递归的概念
    CSS学习笔记3:选择器及优先级
    CSS学习笔记2:伪类
  • 原文地址:https://www.cnblogs.com/tangxlblog/p/9946911.html
Copyright © 2011-2022 走看看