快速排序
快排,取一个数字作为参照,比他大的放右边,小的放左边,递归(思想 分而治之),
直到最后序列 < 2
def quick_sort(num_list):
if len(num_list) < 2:
return num_list
else:
base = num_list[0]
left = [left_num for left_num in num_list[1:] if left_num <= base]
right = [right_num for right_num in num_list[1:] if right_num > base]
return quick_sort(left) + [base] + quick_sort(right)
冒泡排序
冒泡就是一趟一趟交换位置
def mao_pao_sort(num_list):
for num in range(len(num_list)):
for j in range(1, len(num_list) - num):
if num_list[j - 1] > num_list[j]:
# 换位置
num_list[j], num_list[j - 1] = num_list[j - 1], num_list[j]
return num_list
选择排序
选择排序 先找到最小(大)的数字放在起始位置,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾
class ChoiceSoft:
def __init__(self, num_list):
self.num_list = num_list
def small_index(self):
total_num = len(self.num_list)
small_num = self.num_list[0]
small_index = 0 # 最小数的索引
for num in range(1, total_num):
if small_num > self.num_list[num]:
small_num = self.num_list[num]
small_index = num
# 返回索引
return small_index
def soft(self):
new_arr = []
# for i in range(1, len(self.num_list)):
while self.num_list:
small = self.small_index()
new_arr.append(self.num_list.pop(small))
return new_arr
插入排序
步骤
1 从第一个元素开始,该元素可以认为已经被排序
2 取出下一个元素,在已经排序的元素序列中从后向前扫描
3 如果该元素(已排序)大于新元素,将该元素移到下一位置
4 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5 将新元素插入到该位置后
6 重复步骤2~5
插入算法把要排序的数组分成两部分:
第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),
而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
def first_insert_soft(num_list):
for num in range(1, len(num_list)):
key = num_list[num]
j = num
while j >= 0:
if num_list[j] > key:
num_list[j + 1] = num_list[j]
num_list[j] = key
j -= 1
return num_list
def second_insert_sort(num_list):
for k in range(1, len(num_list)):
cur = num_list[k]
j = k
while j > 0 and num_list[j - 1] > cur:
num_list[j] = num_list[j - 1]
j -= 1
num_list[j] = cur
return num_list
欢迎大家提供更多的有关排序算法得意见