选择排序:一个列表被分为无序列表和有序列表,选择排序就是拿无序列表的第一个和后面的每一个相比较,每一趟选择出最小的一个,添加进有序列表。
def select_sort(list): for i in range(0,len(list)-1): #执行len(list)-1 趟 min=i for j in range(i+1,len(list)): if list[j]<list[min]: min=j list[i],list[min]=list[min],list[i] return list list=[5,7,3,2,9,1,6,4] print(select_sort(list))
插入排序:
# 插入排序 for j in range(1, len(A)): # 假设第一个数是排序好的 key = A[j] # 取出当前未排序的数 i = j-1 # 从后往前,先取未排序数的前一个数(已经排序好的数) while i >= 0 and A[i] > key: # 若当前未排序的数比排序好的数还小 并且没有到数组的开头 A[i+1] = A[i] # 排序好的数往后挪一个位置 i = i-1 # 取排序好的数的前一个数进行比较 A[i+1] = key # 插入当前要排序的数
快速排序:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换; 4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换; 5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
def quick_sort(data,left,right): if left<right: mid=partition(data,left,right) quick_sort(data,left,mid-1) quick_sort(data,mid+1,right) def partition(data,left,right): tmp=data[left] while left<right: while left<right and data[right]>=tmp: right-=1 data[left]=data[right] while left<right and data[left]<=tmp: left+=1 data[right]=data[left] data[left]=tmp return left