失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python实现四种排序(选择 冒泡 插入 快速)

Python实现四种排序(选择 冒泡 插入 快速)

时间:2023-02-13 14:42:08

相关推荐

Python实现四种排序(选择 冒泡 插入 快速)

用Python实现了四种排序方法:

一:选择排序

选择排序其实就是取第一个数去跟后面的数比较,然后一轮之后得到最小的数在第一个,然后开始取第二个,重复之前的比较。

可以先举例,五个数的时候,四轮就能排序完,内循环则为外循环加1开始

版本一:

list=[1,2,5,6,4,7] #选择排序 for i in range(len(list)-1): for j in range(i+1,len(list)): if(list[i]>list[j]): #若找到更小的数 list[i],list[j]=list[j],list[i] #直接交换 print(list)

后来发现可以改进,每次都直接交换数值会减慢排序速度,换成交换下标会提升速度

改进版:

def choose_sort(list): for i in range(len(list)-1): min_index=i #假设i为最小值的下标 for j in range(i+1,len(list)): if(list[min_index]>list[j]): #若有更小的值 min_index=j #交换下标 list[i],list[min_index]=list[min_index],list[i] #找出最小下标后,交换值 return listprint(choose_sort(list))

二:冒泡排序:

冒泡排序是从左往右每两个都进行比较,较大的值往右走,每一轮较大的值都到右端,外层循环次数还是跟选择排序一样,但内层循环要注意是到 len(list)-i-1

版本一:

def bubble_sort1(list): for i in range(len(list)-1): for j in range(len(list)-1-i): if(list[j]>list[j+1]): #临近的两个值进行比较 list[j],list[j+1]=list[j+1],list[j] #交换值,较大的往右移动 return listprint(bubble_sort1(list))

后来在github上骆昊大神的Pyt-100-days学到更高级的冒泡排序,链接在此:github

改进版:

def bubble_sort2(list): #将大的移动到右端 for i in range(len(list)): flag=False for j in range(len(list)-1-i): if(list[j]>list[j+1]): list[j],list[j+1]=list[j+1],list[j] flag=True #若移动成功 if flag: flag=False #将小的移动到左端 for j in range(len(list)-i-2,1,-1): if(list[j]<list[j-1]): list[j-1],list[j]=list[j],list[j-1] flag=True #此方法高效是因为一个循环排序号一个大的和一个小的 if not flag: break return listprint(bubble_sort2(list))

三:插入排序

插入排序就是从左边开始取值,然后跟它左边的所以值进行比较,如果取的值比左边的值小就与其交换,外层循环可以从1开始,内层循环到外层循环的值 相当于每次取的值放入之前值应该在的位置,例如前面有1,5,8已经排序完成,下一个是要插入的值4,从1开始比较,发现4比5小,则4与5互相交换位置,之后拿5继续与后面的8比较,发现5比8小,交换位置,最后完成排序。

def insert_sort(list): for i in range(1,len(list)): #从第二个数开始 for j in range(i): #比较到外层循环的下标值 if(list[i]<list[j]): list[i],list[j]=list[j],list[i] #较小的值往左移 return listprint(insert_sort(list))

四:快速排序

四种排序中排序速度最快的,选择列表中的一个值作为中间值,将整个列表分割成两半,加中间 ,左边是小于中间值的,右边是大于中间值的,然后如何分出来的列表里元素大于等于两个就继续分,即采用递归,直到每个列表都只有一个元素

def fast_sort(list): if(len(list)>1): #若列表中元素多于一个,进行分割 mid=list[len(list)//2] #取列表的中间值作为分割点 left,right=[],[] #建立左右两个空列表 list.remove(mid) #先将中间值移出列表 for i in range(len(list)): #分割列表 if(list[i]>mid): right.append(list[i]) #大于中间值的放入右列表 else: left.append(list[i]) #小于中间值的放入右列表 return fast_sort(left)+[mid]+fast_sort(right) #递归并拼接列表 else: return listprint(fast_sort(list))

如果觉得《Python实现四种排序(选择 冒泡 插入 快速)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。