【算法】使用java和python实现冒泡排序(优化版)

目录

一、问题描述

描述

示例1

示例2

二、用python实现

三、用java实现


一、问题描述

描述

给定一个长度为 n 的数组,请你编写一个函数,返回该数组按升序排序后的结果。

数据范围: 0 \le n \le 1\times10^30≤n≤1×103,数组中每个元素都满足 0 \le val \le 10^90≤val≤109

要求:时间复杂度 O(n^2)O(n2),空间复杂度 O(n)O(n)

进阶:时间复杂度 O(nlogn)O(nlogn),空间复杂度 O(n)O(n)

注:本题数据范围允许绝大部分排序算法,请尝试多种排序算法的实现。

示例1

输入:[5,2,3,1,4]

返回值:[1,2,3,4,5]

示例2

输入:[5,1,6,2,5]

返回值:[1,2,5,5,6]

二、用python实现

class Solution:
    def MySort(self , arr: List[int]) -> List[int]:
        for i in range(len(arr) -1):    # i为需要交换的次数,因为最后到最后一个数时已经是最小的了,所以不需要交换
            exchange = False            # 默认交换为false
            for j in range(len(arr)-i-1):  # j为交换的数字的索引,arr[j]为当前交换的数
                if arr[j]>arr[j+1]:        # 当当前的数大于该数下一个数时,将两者交换
                    arr[j],arr[j+1] = arr[j+1],arr[j]  
                    exchange = True    
            if not exchange:            # 这边判定如果无需全部交换就已经得出有序的数列,那么就直接返回数列,减少后面无用的排序次数
                return  arr

三、用java实现

public class Solution {

    public int[] MySort (int[] arr) {
        
        for(int i =0;i< arr.length-1;i++){  
            boolean exchange = false;
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    int tmp = arr[j];   //这边的数字交换和python不同 需要为交换定义一个临时变量tmp,通过这个tmp实现交换
                    arr[j]= arr[j+1];
                    arr[j+1] = tmp;
                    exchange = true;
                }
            }
            if(!exchange)
                return arr;
        }
          return  arr;

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值