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

十一,Python排序:冒泡排序、直接排序、简单选择排序

时间:2023-03-26 00:46:22 Python

1。冒泡排序冒泡排序是交换排序的一种。什么是交换排序?交换排序:将待排序的关键字两两比较,将不满足顺序要求的对进行交换,直到整表满足顺序要求。代码示例:defbubble_sort(demo:list):length=len(demo)foriinrange(length):print("*"*30)forjinrange(length-i-1):ifdemo[j]>demo[j+1]:demo[j],demo[j+1]=demo[j+1],demo[j]print('{}times:'.format(i),demo)print("最终排序:",demo)if__name__=='__main__':num_list=[33,4,15,2,72,57,9,52,90,55]bubble_sort(num_list)结果:***************************0次:[4、15、2、33、57、9、52、72、55、90]********************************1次:[4,2,15,33,9,52,57,55,72,90]**********************************************************2次:[2,4,15,9,33,52,55,57,72,90]*********************************3次:[2,4,9,15,33,52,55,57,72,90]************************************************************************************************************************************15,33,52,55,57,72,90]*******************************************5次:[2,4,9,15,33,52,55,57,72,90]**********************************6:[2,4,9,15,33,52,55,57,72,90]***********************************7次:[2,4,9,15,33,52,55,57,72,90]***********************************8次:[2,4,9,15,33,52,55,57,72,90]************************************9次:[2,4,9,15,33,52,55,57,72,90]最后排序:[2,4,9,15,33,52,55,57,72,90]从结果可以看出,在第三时间,已经完成排序,后面的迭代只是浪费时间,所以可以优化代码示例:defbubble_sort(demo:list):length=len(demo)foriinrange(length):flag=Falseprint("*"*30)forjinrange(length-i-1):ifdemo[j]>demo[j+1]:demo[j],demo[j+1]=demo[j+1],demo[j]flag=True打印('{}times:'.format(i),demo)ifnotflag:breakprint("Finalsort:",demo)if__name__=='__main__':num_list=[33,4,15,2,72,57,9,52,90,55]bubble_sort(num_list)结果*************************************************************************************************************************************************************************************57、55、72、90]********************************2次:[2,4,15,9,33,52,55,57,72,90]*********************************3次:[2,4,9,15,33,52,55,57,72,90]最后排序:[2,4,9,15,33,52,55,57,72,90]2.直接排序原则:在未排序的序列中,构造一个子排序序列,直到所有数据排序完成。将要排序的数字插入排序序列中的适当位置。加一个sentinel,把要比较的值放进去,和后面排序好的序列比较,找到合适的插入点。代码示例definsert_sort(li):foriinrange(1,len(li)):tmp=li[i]j=i-1whilej>=0andli[j]>tmp:li[j+1]=li[j]j-=1li[j+1]=tmpprint(f"{i}:{li}")print(li)if__name__=='__main__':li=[33,4,15,2,72,57,9,52,90,55]insert_sort(li)结果:1:[4,33,15,2,72,57,9,52,90,55]2:[4,15,33,2,72,57,9,52,90,55]3:[2,4,15,33,72,57,9,52,90,55]4:[2,4,15,33,72,57,9,52,90,55]5:[2,4,15,33,57,72,9,52,90,55]6:[2,4,9,15,33,57,72,52,90,55]7:[2,4,9,15,33,52,57,72,90,55]8:[2,4,9,15,33,52,57,72,90,55]9:[2,4,9,15,33,52,55,57,72,90][2,4,9,15,33,52,55,57,72,90]3.简单选择排序简单选择排序就是一种选择排序。选择排序:每次从待排序的记录中选择关键字最小的记录,放在已排序记录序列的末尾,直到所有排序结束。代码示例defsimple_select_sort1(demo:list):"""简单选择排序:paramdemo::return:"""length=len(demo)foriinrange(length):maxindex=iforjinrange(i+1、length):ifdemo[maxindex]demo[-j-1]:minindex=-j-1ifi!=maxindex:demo[i],demo[maxindex]=demo[maxindex],demo[i]如果我==长度+最小索引:minindex=maxindexifminorgin!=minindex:demo[minorgin],demo[minindex]=demo[minindex],demo[minorgin]print("{}time{}".format(i,demo))print("最终排序{}".format(demo))if__name__=='__main__':num_list=[33,4,15,2,72,57,9,52,90,55]simple_select_sort1(num_list)print("*"*40)simple_select_sort2(num_list)结果0[90,4,15,2,72,57,9,52,33,55]1[90,72,15,2,4,57,9,52,33,55]2次[90,72,57,2,4,15,9,52,33,55]3次[90,72,57,55,4,15,9,52,33,2]4次[90,72,57,55,52,15,9,4,33,2]5次[90,72,57,55,52,33,9,4,15,2]6次[90,72,57,55,52,33,15,4,9,2]7次[90,72,57,55,52,33,15,9,4,2]8次[90,72,57,55,52,33,15,9,4,2]9次[90,72,57,55,52,33,15,9,4,2]最后排序*******************************************0次[90,72,57,55,52,33,15,9,4,2]1次[90,72,57,55,52,33,15,9,4,2]2次[90,72,57,55,52,33,15,9,4,2]3次[90,72,57,55,52,33,15,9,4,2]4次[90,72,57,55,52,33,15,9,4,2]最后排序[90,72,57,55,52,33,15,9,4,2]