排序数组
难度:中等
给你一个整数数组 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]
插入排序
思路:
对于未排序数据,在已排序序列中 从后向前 扫描,找到相应位置并插入。
为了给要插入的元素腾出空间,我们需要将插入位置之后的已排序元素在都向右移动一位插入排序所需的时间取决于输入中元素的初始顺序。例如,对一个很大且其中的元素已经有序或接近有序)的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序要快得多。
总的来说,插入排序对于部分 有序的数组十分高效,也很适合小规模数组。
时间复杂度:
O
(
n
2
)
O(n^2)
O(n2),在完全有序的情况下,插入排序每个未排序区间元素只需要比较
1
1
1次,所以时间复杂度是
O
(
n
)
O(n)
O(n)。而在极端情况完全逆序,时间复杂度为
O
(
n
2
)
O(n^2)
O(n2)。就等于每次都把未排序元素插入到数组第一位。在数组中插入
1
1
1个元素的时间复杂度为
O
(
n
)
O(n)
O(n),那插入
n
n
n个就是
O
(
n
2
)
O(n^2)
O(n2)了。
空间复杂度:
O
(
1
)
O(1)
O(1),原地排序算法。
class Solution:
def sortArray(self, nums: List[int]) -> List[int]:
for i in range(1, len(nums)):
# 待排序元素位置
sort_index = i
# 待排序元素值
sort_num = nums[i]
# 搜索插入的位置,不满足的情况的元素向后移动一位腾出位置
while sort_index != 0 and sort_num < nums[sort_index-1]:
nums[sort_index] = nums[sort_index-1]
sort_index -= 1
# 将排序元素插入搜索到的位置
nums[sort_index] = sort_num
return nums
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sort-an-array