def bubble_sort(alist): '''冒泡排序''' l = len(alist) for j in range(l-1): for i in range(l-1-j): if alist[i] > alist[i+1]: alist[i],alist[i+1] = alist[i+1],alist[i] return alist
def select_sort(alist): '''选择排序''' l = len(alist) # 需要进行l-1轮选择操作 for j in range(l-1): #记录最小元素下标 min_index = j #从j位置开始,筛选出最小元素,然后放置到j位置 for i in range(j+1,l): if alist[i] < alist[min_index]: min_index = i #如果数据不在正确位置,则进行交换 if j != min_index: alist[j],alist[min_index] = alist[min_index],alist[j] return alist
def insert_sort(alist): '''插入排序''' #从下标为1的元素开始,逐个向前插入 for i in range(1,len(alist)): # 从第i个元素开始与前面进行比较,比前面数小,则交换位置 while i>0: if alist[i] < alist[i-1]: alist[i],alist[i-1] = alist[i-1],alist[i] i -= 1 else: break return alist
def shell_sort(alist): '''希尔排序''' #初始增量 gap = len(alist) // 2 while gap >= 1: #按照指定增量进行插入排序 for i in range(gap,len(alist)): while i > 0: if alist[i] < alist[i-gap]: alist[i],alist[i-gap] = alist[i-gap],alist[i] i -= gap else: break #缩减增量 gap //= 2 return alist
# coding:utf-8 def quick_sort(alist,left,right): '''快速排序''' #递归退出条件 if right <= left: return mid = alist[left] #序列起始元素为基准 low = left #左指针 high = right #右指针 #左右指针未重合时,循环执行 while low < high: #先移动右侧指针 while low < high: if alist[high] >= mid: high -= 1 else: alist[low] = alist[high] break #再移动左侧指针 while low < high: if alist[low] <= mid: low += 1 else: alist[high] = alist[low] break alist[low] = mid #左右指针重合,将基准放置到重合位置上 quick_sort(alist,left,low-1) #基准左侧序列进行快速排序 quick_sort(alist,high+1,right) #基准右侧序列进行快速排序 if __name__ == '__main__': alist = [4,2,7,6,8,1,9,3,5,0] quick_sort(alist,0,len(alist)-1) print(alist)
def merge_sort(alist): n = len(alist) #结束递归的条件 if n <= 1: return alist #中间索引 mid = n//2 left_li = merge_sort(alist[:mid]) right_li = merge_sort(alist[mid:]) #指向左右表中第一个元素的指针 left_pointer,right_pointer = 0,0 #合并数据对应的列表:该表中存储的为排序后的数据 result = [] while left_pointer < len(left_li) and right_pointer < len(right_li): #比较最小集合中的元素,将最小元素添加到result列表中 if left_li[left_pointer] < right_li[right_pointer]: result.append(left_li[left_pointer]) left_pointer += 1 else: result.append(right_li[right_pointer]) right_pointer += 1 #当左右表的某一个表的指针偏移到末尾的时候,比较大小结束,将另一张表中的数据(有序)添加到result中 result += left_li[left_pointer:] result += right_li[right_pointer:] return result