当前位置: 首页 > 后端技术 > Python

几种常见排序算法的pyhton实现及详解

时间:2023-03-26 00:57:47 Python

快速排序的核心是在选中一个值后,每次将剩下的所有值分到比这个值大和小的一边,然后举例,在较大的边上,继续递归重复这个过程。##快速排序defquick_sort(li):#当数组长度大于1时,需要递归排序iflen(li)>1:#重要的第一步是取C位置的数asthebenchmarkmid=li[len(li)//2]right=[]left=[]#去掉benchmark后,剩下的数和benchmark一一比较li.remove(mid)foriinrange(len(li)):#与benchmark比较较大的放在新的右列表中,较小的放在左列表中ifli[i]>=mid:right.append(li[i])else:left.append(li[i])#下面是最核心的一步。返回左右列表继续递归returnquick_sort(left)+[mid]+quick_sort(right)else:returnliif??__name__=='__main__':li=[66,21,4,56,78,5,65]b=quick_sort(li)print(b)冒泡排序的核心是从某个数(一般是第一个)开始和隔壁比较大小,然后继续交换,这样如果从从小到大,从小到大从左边开始,经过第一轮后,数字大的排在最后。#冒泡排序defbubble_sort(li):#创建一个标识符,这样如果某个时间没有交换一个数,则标识符为false,不需要继续,这样可以节省几个循环。flag=False#从第一个A数开始比较,最差只需要比较总长度-1次foriinrange(len(li)-1):#比较第i个数时,只需要去掉最后一个i,然后去掉1本身Insideratioforjinrange(len(li)-i-1):#如果这个数大于最后一个,交换位置ifli[j]>li[j+1]:li[j],li[j+1]=li[j+1],li[j]flag=Trueifflag==False:breakreturnliif__name__=='__main__':li=[66,21,4,56,78,5,65]a=bubble_sort(li)打印(a)