*leetcode 912. 排序数组(各种经典排序算法)

【题目】912. 排序数组

给你一个整数数组 nums,请你将该数组升序排列。
示例 1:

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

示例 2:

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

提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000

经典排序算法的整理

【解题思路1】冒泡

虽然正确,但一般都会超时

class Solution {
    public int[] sortArray(int[] nums) {
        //冒泡排序
        for(int i=0; i<nums.length; i++){
            for(int j=i+1; j<nums.length; j++){
                if(nums[i] > nums[j]){
                    swap(nums, i, j);
                }
            }
        }
        return nums;
    }
    
    public void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

【解题思路2】选择排序

每次选择 [ i, len-1 ] 区间的最小元素,用min保存下标,然后和 nums[i] 交换,使 [ 0, i ] 为有序区间。

class Solution {
    public int[] sortArray(int[] nums) {
        //选择排序
        for(int i=0; i<nums.length; i++){
            int min = i; //[i,len-1]最小元素的下标
            for(int j=i+1; j<nums.length; j++){
                if(nums[min] > nums[j]){
                    min = j;
                }
            }
            swap(nums, i, min);
        }
        return nums;
    }
    
    public void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

【解题思路3】插入排序

class Solution {
    public int[] sortArray(int[] nums) {
        //插入排序
        for(int i=1; i<nums.length; i++){
            int temp = nums[i]; //暂存要插入的元素
            int j = i;
            while( j>0 && temp<nums[j-1]){
                nums[j] = nums[j-1]; //如果要插入的元素小于当前元素,当前元素后移
                j--;
            }
            nums[j] = temp; //找到要插入的位置,插入元素
        }
        return nums;
    }
}

【解题思路4】快速排序


【解题思路5】归并排序


【解题思路6】堆排序


发布了134 篇原创文章 · 获赞 132 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/XunCiy/article/details/105222650