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

Posted 陈默不再沉默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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


以上是关于37.[中等]排序数组--冒泡排序选择排序插入排序的主要内容,如果未能解决你的问题,请参考以下文章

数组排序-冒泡排序-插入排序-选择排序-Java实现

Java学习 数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

Python八大算法的实现,插入排序希尔排序冒泡排序快速排序直接选择排序堆排序归并排序基数排序。

用Java编程语言对一个无序整形数组进行排序(冒泡排序,选择排序,插入排序)

三大数组排序方法(选择冒泡插入)

冒泡排序选择排序插入排序