目录
一、问题描述
描述
给定一个长度为 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;
}
}