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

Python动图展示八大常用排序算法,让你一次看个够

时间:2023-03-25 22:54:38 Python

Python动画展示了八种常用的排序算法,让你一目了然。计数排序文章内容很干很长,但是里面有各种动图,希望能给枯燥的算法学习带来一丝色彩!不清楚复杂度的可以查看下面的文章01冒泡排序相信大家对冒泡排序都不陌生。核心思想是两两比较相邻的元素,把较大的元素放在后面。一轮比较完成后,最大的元素位于最后一个位置,就好像是一个泡泡,慢慢浮出水面defbubble_sort(data,reverse=False):""":paramdata:list类型数据:paramreverse::return:listtypedata"""ifnotreverse:foriinrange(len(data)-1):forjinrange(len(data)-1-i):>ifdata[j]data[j+1]:data[j],data[j+1]=data[j+1],data[j]返回数据else:foriinrange(len(data)-1):forjinrange(len(data)-1-i):如果数据[j]<数据[j+1]:数据[j],数据[j+1]=数据[j+1],数据[j]返回数据冒泡排序算法比较容易理解。它只需要两个循环。最外层循环表示排序元素的个数,内层循环进行两两比较。时间复杂度为O(n^2)02快排快排的思路是先随机选择一个数据(一般是数组的第一个数)作为关键数据,然后将所有比它小的数放入在它前面,把所有比它大的数放在它后面,这个过程叫做快速排序,之后对两边数据递归排序defquick_sort(data):ifnotdata:returndatafirst=data[0]left=quick_sort([lforlindata[1:]ifl=first])returnleft+[first]+right与冒泡排序相比,快速排序的每次交换都是跳跃式的,每次排序都设置一个参考点。小于或等于参考点的数字都放在参考点的左边,大于或等于参考点的数字都放在参考点的右边。这样,每次交换不仅会像冒泡排序那样每次只交换相邻的数,而且交换距离会大很多。因此,总的比较和交流的次数减少了,速度自然就提高了。时间复杂度为O(N*logN)03直接插入排序插入排序的思想是向一个有序序列中插入一个数据,得到一个新序列加一的有序序列,可以通过下图进一步理解definsert_sort(data,reverse=False):如果不反转:foriinrange(1,len(data)):key=data[i]j=i-1whilej>=0:ifdata[j]>key:data[j+1]=data[j]data[j]=keyj-=1返回数据else:foriinrange(1,len(data)):key=data[i]j=i-1whilej>=0:ifdata[j]数据[min_index]:min_index=j数据[i],data[min_index]=data[min_index],data[i]返回数据选择排序和冒泡排序还是很相似的,但是选择排序会比冒泡排序少一个交换过程,但也是两层的循环,整体时间复杂度为O(n^2)05归并排序可以将一个数组分成两半s,当数组有序时,可以对每个数组进行合并操作。递归他们的两个区间,一直递归划分区间。当区间只有一个值时,我们可以合并返回上一层,让上一层合并再返回defmerge(a,b):c=[]h=j=0whilej