vlambda博客
学习文章列表

37.[中等]排序数组--冒泡排序、选择排序、插入排序

题目

给你一个整数数组 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

写在前面

今天使用的三种排序方式, 冒泡排序、选择排序和插入排序, 时间复杂度都是 N 的二次方, 所以用来解这个题目会超时。

冒泡排序

冒泡排序思路是遍历整个数据, 将当前数与下一个数比较, 如果当前数大于下一个数, 那么交换他们的位置。这样每一次遍历后, 最大的值都会出现在数组的末尾, 一直重复直到数组从后往前依次有序。

这种方法的时间复杂度是 N 的二次方。

冒泡排序
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
for i in range(len(nums)):
for j in range(len(nums) - i - 1):
if nums[j] > nums[j + 1]:
temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp

return nums

选择排序

选择排序思路是找到数组中最小的数, 并且看当前数组无序部分第一个位置交换顺序。保证整个数组的有序。

选择排序
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
for index in range(len(nums)):
for i in range(index, len(nums)):
if nums[i] < nums[index]:
nums[index], nums[i] = nums[i], nums[index]

return nums

插入排序

插入排序则是构建一个有序数组, 依次将未排序的数组, 从后往前遍历整个有序数组找到正确位置后, 将数据插入。

插入排序
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
for index in range(1, len(nums)):
temp = nums[index]
i = index - 1
while i >= 0 and nums[i] > temp:
nums[i + 1] = nums[i]
i -= 1
nums[i + 1] = temp
return nums