LeetCode高频面试60天打卡日记Day31

Day31(数组升序–冒泡、选择、插入、快速排序)

在这里插入图片描述

class Solution {
    
    
    public int[] sortArray(int[] nums) {
    
    
        // BubbleSort(nums);
        // selectSort(nums);
        insertSort(nums);
        return nums;
    }
    
    //冒泡排序
    public void BubbleSort(int[] nums){
    
    
        int n = nums.length;
        for(int i=0;i<n-1;i++){
    
    
            boolean isSort = true;
            for(int j=0;j<n-i-1;j++){
    
    
                if(nums[j+1]<nums[j]){
    
    
                    isSort = false;
                    int temp = nums[j+1];
                    nums[j+1] = nums[j];
                    nums[j] = temp;
                }
            }
            if(isSort){
    
    
                break;
            }
        }
    }
    
    //选择排序
    public void selectSort(int[] nums){
    
    
        int n = nums.length;
        //遍历n-1次 前n-1选择好了之后 最后一个元素必然满足要求
        for(int i=0;i<n-1;i++){
    
    
            int minIndex = i;
            for(int j=i+1;j<n;j++){
    
    
                if(nums[j]<nums[minIndex]){
    
    
                    minIndex = j;
                }
            }
            //交换数据把最小的元素给i
            int temp = nums[minIndex];
            nums[minIndex] = nums[i];
            nums[i] = temp;
        }
    }
    
    //插入排序
    public void insertSort(int[] nums){
    
    
        int n = nums.length;
        //循环数组 将nums[i]插入到 nums[0,i)有序区间中
        for(int i=1;i<n;i++){
    
    
            int temp = nums[i];
            int j = i;
            while(j>0 && (nums[j-1]>temp)){
    
    
                nums[j] = nums[j-1];
                j--;
            }
            nums[j] = temp;
        }
    }
    
    //快速排序 ---重点掌握
    public void quickSort(int[] nums,int low,int high){
    
    
        int i,j,base;
        if(low>high){
    
    
            return;
        }
        i = low;
        j = high;
        base = nums[low];
        while(i<j){
    
    
            //从右边找一个比base小的
            while(base<=nums[j] && (i<j)){
    
    
                j--;
            }
            //从左边找一个比base大的
            while (base>=nums[i] && (i<j)){
    
    
                i++;
            }
            //交换i,j数据
            if(i<j){
    
    
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
        //交换base和ij相遇数字
        int temp = nums[i];
        nums[i] = base;
        nums[low] = temp;  //不能写成base=temp  i,j,base都只是 low high nums[low]的代表
        //递归执行base左边和右边
        quickSort(nums,low,j-1);
        quickSort(nums,j+1,high);
    }
}

猜你喜欢

转载自blog.csdn.net/YoungNUAA/article/details/105235673