在这里插入代码片
```#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
1、冒泡排序: 两数之间比较,如果大于后面一位,即替换位置 ok
2、选择排序: 找出数组中最小的数,与第一个元素校验,以此类推 ok
3、插入排序: 存在 arr[i] < arr[i+] ,arr[i]=arr[i+], 后移补位至 arr[i+]
4、希尔排序: 分组排序 ok
5、快速排序: ok
6、归并排序:
'''
class Ranking(object):
# 冒泡排序:两数之间比较,如果大于后面一位,即替换位置
def bubble_sort(self, arr: list):
n = len(arr)
for i in range(n):
# flag = False
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# 选择排序:找出数组中最小的数,与第一个元素校验,以此类推
def choice_sort(self, arr: list):
for i in range(len(arr) - 1):
min_idx = i
for j in range(i + 1, len(arr) - 1):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
print(arr)
return arr
# 插入排序: 存在 arr[i] < arr[i+] ,arr[i]=arr[i+], 后移补位至 arr[i+]
def insertion_sort(self, arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
print(arr)
return arr
# 希尔排序
def xier_sort(self, arr):
grap = len(arr) // 2
while grap > 0:
for i in range(grap, len(arr)):
for j in range(grap, len(arr)):
if arr[j - grap] > arr[j]:
arr[j - grap], arr[j] = arr[j], arr[j - grap]
print(arr)
grap = grap // 2
return arr
# 快速排序
def quick_sort(self, arr):
if len(arr) <= 1:
return arr
index = len(arr) // 2
volit = arr[index]
arr_left = [i for i in arr if i < volit]
arr_mid = [x for x in arr if x == volit]
arr_right = [j for j in arr if j > volit]
list = self.quick_sort(arr_left) + self.quick_sort(arr_mid) + self.quick_sort(arr_right)
return list
# 归并排序
def merge_sort(self, arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_arr = arr[:mid]
right_arr = arr[mid:]
left_arr = self.merge_sort(left_arr)
right_arr = self.merge_sort(right_arr)
return self.merge(left_arr, right_arr)
def merge(self, left_arr, right_arr):
merged = []
left_index = 0
right_index = 0
while left_index < len(left_arr) and right_index < len(arr):
if left_arr[left_index] < right_arr[right_index]:
merged.append(left_arr[left_index])
left_index += 1
else:
merged.append(right_arr[right_index])
right_index += 1
while left_index < len(left_arr):
merged.append(left_arr[left_index])
left_index += 1
while right_index < len(right_arr):
merged.append(right_arr[right_index])
right_index + 1
return merged
if __name__ == '__main__':
arr = [18, 80, 2, 96, 77, 43, 8, 1, 28, 79]
ranking = Ranking()
resule = ranking.merge_sort(arr)
print(resule)
python 常规排序算法
于 2024-06-24 16:30:58 首次发布

277

被折叠的 条评论
为什么被折叠?



