常用的算法有哪些?
- 冒泡排序
1.元素两两比较,然后将较大的元素逐步向后偏移(将最大值逐步移动到最后位置)
2.循环上一步操作即可
#step1: #def maopao(alist): # for i in range(len(alist)-1): # if alist[i] > alist[i+1]: # alist[i],alist[i+1] = alist[i+1],alist[i] # return alist #step2 def maopao(alist): for j in range(len(alist)-1): for i in range(len(alist)-1-j): if alist[i] > alist[i+1]: alist[i],alist[i+1] = alist[i+1],alist[i] return alist
- 动图演示:
- 选择排序
1.将乱序序列中的最大值找出,直接让其和最后一个元素交换位置即可
2.循环第一步
def xuanze(alist): for j in range(len(alist)-1): max_index = 0 #保存最大元素的下标 for i in range(len(alist)-1-j): if alist[i+1] > alist[max_index]: max_index = i+1 alist[max_index],alist[len(alist)-1-j] = alist[len(alist)-1-j],alist[max_index] return alist
- 动图演示
- 插入排序
插入排序:将无序部分的元素以此插入到有序部分即可
- 把乱序序列假设拆分成两部分
- 有序部分:默认将第一个元素
- 无序部分:剩下元素
i:表示有序部分元素的个数,alist[i]无序部分的第一个元素,alist[i-1]有序部分的最后一个元素 i = 1 if alist[i] < alist[i-1]: alist[i],alist[i-1] = alist[i-1],alist[i] i = 2 while i >= 1: if alist[i] < alist[i-1]: alist[i],alist[i-1] = alist[i-1],alist[i] i -= 1 else: break ''' def charu(alist): for i in range(1,len(alist)): while i >= 1: if alist[i] < alist[i-1]: alist[i],alist[i-1] = alist[i-1],alist[i] i -= 1 else: break return alist
- 动图演示
# 希尔排序
''' 希尔排序: - gap:初始值就是序列个数整除2 - gap的作用: - gap表示间隔 - gap表示组数 - 插入排序就是增量为1的希尔排序 ''' def xier(alist): gap = len(alist) // 2 while gap >= 1: for i in range(gap,len(alist)): while i >= gap: if alist[i] < alist[i-gap]: alist[i],alist[i-gap] = alist[i-gap],alist[i] i -= gap else: break gap //= 2 return alist
- 快速排序
''' 快速排序: - 基数mid:默认将序列中的第一个元素做为基数的值即可。 - 实现一个效果:将序列中的元素进行移动,基数左侧都是比基数小的元素,右侧都是比基数大的元素 ''' def quickSort(alist,start,end): low = start hight = end if low > hight: return #结束递归的条件 mid = alist[low] while low < hight: while low < hight: if alist[hight] > mid: hight -= 1 else: alist[low] = alist[hight] break while low < hight: if alist[low] < mid: low += 1 else: alist[hight] = alist[low] break if low == hight: alist[low] = mid quickSort(alist,start,hight-1) quickSort(alist,low+1,end) return alist alist = [3, 5, 8, 1, 2, 9, 4, 7, 6] print(quickSort(alist,0,len(alist)-1))
- 动图演示