冒泡排序复习

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序复习相关的知识,希望对你有一定的参考价值。

基本思想,依次比较相邻的元素大小,将大的元素交换到后面,
每次都是从当前元素位置出发,直到未完成排序的末尾;依次冒泡,直到完成由小到大的排序;

class Solution 
    public int[] sortArray(int[] nums) 
        int n = nums.length;
        //基本冒泡排序;
        for(int i =0;i<n-1;i++)
            for(int j=1;j<n-i;j++)
                //比较交换;
                if(nums[j]<nums[j-1])
                    swap(nums,j-1,j);
                
            
        
        return nums;
    

    //交换方法;
    private void swap(int[] nums,int a,int b)
        //简单的临时变量交换法;
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    

同样地,在912. 排序数组这道题中测试时,
由于测试用例的大小,出现了超时;

简易优化,使用一个布尔标志位;判断是否进行了交换;

class Solution 
    public int[] sortArray(int[] nums) 
        int n = nums.length;
        //基本冒泡排序;
        for(int i =0;i<n-1;i++)
            //布尔标志位;
            boolean flag = true;
            for(int j=1;j<n-i;j++)
                //比较交换;
                if(nums[j]<nums[j-1])
                    swap(nums,j-1,j);
                    flag = false;
                
            
            //根据标志位判断是否进行了交换排序;
            if(flag)
                break;
            else
                flag = true;
            
        
        return nums;
    

    //交换方法;
    private void swap(int[] nums,int a,int b)
        //简单的临时变量交换法;
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    

在这道题的测试用例下,即使使用标志位优化,还是超时;
但是算法的思想逻辑没有错误,只是时间复杂度问题;

以上是关于冒泡排序复习的主要内容,如果未能解决你的问题,请参考以下文章

python复习冒泡排序

c#复习-冒泡排序

排序算法复习-冒泡

排序算法的程序实现——冒泡排序复习

6.17 复习 根据学生分数进行学生信息的 冒泡排序

算法排序之冒泡排序