请给出七大排序算法的python代码
时间: 2023-06-10 08:03:30 浏览: 60
1 冒泡排序:
def bubble_sort(nums):
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums2. 选择排序:
def selection_sort(nums):
for i in range(len(nums)-1):
min_idx = i
for j in range(i+1, len(nums)):
if nums[j] < nums[min_idx]:
min_idx = j
nums[i], nums[min_idx] = nums[min_idx], nums[i]
return nums3. 插入排序:
def insertion_sort(nums):
for i in range(1, len(nums)):
cur_val = nums[i]
j = i - 1
while j >= 0 and nums[j] > cur_val:
nums[j+1] = nums[j]
j -= 1
nums[j+1] = cur_val
return nums4. 希尔排序:
def shell_sort(nums):
gap = len(nums) // 2
while gap > 0:
for i in range(gap, len(nums)):
cur_val = nums[i]
j = i
while j >= gap and nums[j-gap] > cur_val:
nums[j] = nums[j-gap]
j -= gap
nums[j] = cur_val
gap //= 2
return nums5. 归并排序:
def merge_sort(nums):
if len(nums) <= 1:
return nums
mid = len(nums) // 2
left_list = merge_sort(nums[:mid])
right_list = merge_sort(nums[mid:])
return merge(left_list, right_list)def merge(left_list, right_list):
res = []
while left_list and right_list:
if left_list[0] < right_list[0]:
res.append(left_list.pop(0))
else:
res.append(right_list.pop(0))
res += left_list
res += right_list
return res6. 快速排序:
def quick_sort(nums):
if len(nums) <= 1:
return nums
pivot = nums[0]
left_list = [x for x in nums[1:] if x < pivot]
right_list = [x for x in nums[1:] if x >= pivot]
return quick_sort(left_list) + [pivot] + quick_sort(right_list)7. 堆排序:
def heap_sort(nums):
n = len(nums)
for i in range(n, -1, -1):
heapify(nums, n, i)
for i in range(n-1, 0, -1):
nums[i], nums[0] = nums[0], nums[i]
heapify(nums, i, 0)
return numsdef heapify(nums, n, i):
largest = i
l = 2 * i + 1
r = 2 * i + 2
if l < n and nums[i] < nums[l]:
largest = l
if r < n and nums[largest] < nums[r]:
largest = r
if largest != i:
nums[i], nums[largest] = nums[largest], nums[i]
heapify(nums, n, largest)答:以上就是七大排序算法的Python代码。
阅读全文