排序算法

it2023-03-22  75

选择排序

source_arr = [4, 6, 5, 10, 3, 2, 1] def sort_selection(): for i in range(len(sourse_arr) - 1): v_min = i # 最小值索引 for j in range(i + 1, len(sourse_arr)): if sourse_arr[v_min] > sourse_arr[j]: # 后面某一个元素小于最小值 v_min = j # 记录最小值索引 # 将最小值索引的元素与首位交换 sourse_arr[i], sourse_arr[v_min] = sourse_arr[v_min], sourse_arr[i] print(sourse_arr)

插入排序

def sort_insertion(): for i in range(1, len(sourse_arr)): for j in range(i, 0, -1): if sourse_arr[j] < sourse_arr[j - 1]: sourse_arr[j], sourse_arr[j - 1] = sourse_arr[j - 1], sourse_arr[j] else: break print(sourse_arr)

快速排序

# 对子组排序,返回分界位置 def sort_quick_part(arr, start, end): key = arr[start] left = start + 1 right = end while 1: # 从右向左扫描 while 1: if arr[right] < key or right == start: break right -= 1 # 从左向右扫描 while 1: if arr[left] > key or left == end: break left += 1 # 如果右指针与左指针重合,扫描完毕 if right <= left: break else: arr[left], arr[right] = arr[right], arr[left] # 交换左右指针对应的元素值 arr[start], arr[right] = arr[right], arr[start] # 交换首位与分界所在的元素值 return right # 返回分界位置 # 对数组递归分组并排序 def sort_quict(arr, start, end): if end <= start: return # 排序,获取分界的位置 part_index = sort_quick_part(arr, start, end) # 左子组递归排序 sort_quict(arr, start, part_index - 1) # 右子组递归排序 sort_quict(arr, part_index + 1, end) sort_quict(source_arr, 0, len(source_arr) - 1) print(source_arr)
最新回复(0)