• 【LeetCode】912. 排序数组


    题目链接:

    912. 排序数组

    题目描述:

    给你一个整数数组 nums,将该数组升序排列。

    示例:

    输入:nums = [5,2,3,1]
    输出:[1,2,3,5]
    
    输入:nums = [5,1,1,2,0,0]
    输出:[0,0,1,1,2,5]
    

    提示:

    1. 1 <= nums.length <= 50000
    2. -50000 <= nums[i] <= 50000

    思路:

    没什么可说的,非常朴实无华的一道题,比那些花里胡哨的强多了

    class Solution {
        public int[] sortArray(int[] nums) {
            // 方法一:系统方法
            // Arrays.sort(nums);
            // return nums;
    
            // 方法二:冒泡排序(超出时间限制)
            // bubbleSort(nums);
            // return nums;
    
            // 方法三:桶排序
            return bucketSort(nums);
    
            // 方法四:选择排序
            // selectionSort(nums);
            // return nums;
    
            // 方法五:插入排序
            // insertionSort(nums);
            // return nums;
        }
    
        /**
         * 冒泡排序
         * @param nums
         */
        private void bubbleSort(int[] nums) {
            for (int i = 0; i < nums.length - 1; i++) {
                for (int j = 0; j < nums.length - 1 - i; j++) {
                    if (nums[j] > nums[j + 1]) {
                        swap(nums, j, j + 1);
                    }
                }
            }
        }
    
        /**
         * 桶排序
         * @param nums
         * @return
         */
        private int[] bucketSort(int[] nums) {
            // 题目:-50000 <= nums[i] <= 50000
            int[] count = new int[100001];
            // 统计每个数字出现的次数
            for (int num : nums) {
                count[num + 50000] ++;
            }
    
            ArrayList<Integer> list = new ArrayList<>(nums.length);
            for (int i = 0; i < count.length; i++) {
                if (count[i] != 0) {
                    for (int j = 0; j < count[i]; j++) {
                        list.add(i - 50000);
                    }
                }
            }
    
            int[] res = new int[list.size()];
            for (int i = 0; i < list.size(); i++) {
                res[i] = list.get(i);
            }
            return res;
        }
    
        /**
         * 选择排序
         * @param nums
         */
        private void selectionSort(int[] nums) {
            for (int i = nums.length - 1; i > 0; i--) {
                // 最大元素的位置
                int maxIndex = 0;
                for (int j = 0; j <= i; j++) {
                    if (nums[maxIndex]<nums[j]) {
                        maxIndex = j;
                    }
                }
                // 把这个最大的元素移到最后
                swap(nums, maxIndex, i);
            }
        }
    
        /**
         * 插入排序
         * @param nums
         */
        private void insertionSort(int[] nums) {
            // 从第二个元素开始遍历
            for (int i = 1; i < nums.length; i++) {
                int j = i;
                // 将当前元素移动到合适的位置
                while (j > 0 && nums[j] < nums[j - 1]) {
                    swap(nums, j, j - 1);
                    j--;
                }
            }
        }
        
        /**
         * 交换数组中两个元素
         * @param nums 数组
         * @param i 元素索引
         * @param j 元素索引
         */
        private void swap(int[] nums, int i, int j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
    
  • 相关阅读:
    c++之五谷杂粮4---explicit
    ping
    Swift常量和变量
    Swift数据类型简介
    Swift 注释
    Swift标示符以及关键字
    xcode简介
    认识Swift
    Android_adb详解
    详解Android AM命令
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12603785.html
Copyright © 2020-2023  润新知