首页 > 编程源码 > python几种排序方法

python几种排序方法

楼主:小亚 [3级] · 2019-12-12 ·  浏览714 · 编程源码 · ID:

‘’'选择排序法和冒泡法其实有一点点相似,其原理是:

1、选取一个(第一次为首元素)元素作为最小(最大)元素;

2、记住该元素下角标min

3、将该元素与余下的元素作比较,若遇到比该元素小(大)的元素,就与min交换值

5、循环n-1次

class Selection():

def selection_sort(self,nums):

for i in range(0,len(nums)-1):

min_=i

for j in range(i+1,len(nums)):

if nums[j]=0 and nums[j]>intermediate:#比较左一位与中间变量的值,如果左面大:
nums[j+1]=nums[j]#
:就将左值赋给右边一位,这里不用担心右面一位的值没有保留,而是在中间变量中

j=j-1#将j值减小一个,向左移一位,继续比较
nums[j+1]=intermediate#
循环结束后,记得把中间变量的值赋给nums[j+1]

return nums

希尔排序法

仔细看代码,看得懂。其实我不知道这是不是希尔排序。。。

class ShellSort():

def shell_sort(self,nums):

chunt=int(len(nums)/2)

while chunt>=1:

i=0

while i+chuntnums[i+chunt]:

print("nums[%d]=%d,nums[%d+%d]=%d"%(i,nums[i],i,chunt,nums[i+chunt]))

nums[i],nums[i+chunt]=nums[i+chunt],nums[i]

i+=1

if i>len(nums):

break

chunt-=1

for i in range(0,len(nums)-1):#这里不要问我为什么,有时候有问题是难免的,找个办法解决就好了

print(i)

if nums[i]>nums[i+1]:

nums[i],nums[i+1]=nums[i+1],nums[i]

return nums

- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者小亚流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/19598.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
3条回复 |  最后回复于2019-12-12

小亚 [3级]

桶排序
关键是将列表里面的数字转化成空桶列表里面的位置:
关键步骤:
1、找出最大值,将空桶长度设为最大值个数
2、将数值转化成列表的位置,相同的加1
3、除去空位置,将位置转化成有序数列
注意:
IndexError: list index out of range
len()函数取出来的是个数,而列表的初始位置是从0开始计算的,不要溢出来了!!!

class BuketSort():
def buket_sort(self,nums):
#查看nums中最大的数,并让空桶也有同样位置
max_=nums[1]
for i in range(len(nums)):
max_=(max(max_,nums[i]))
#输出最大数字
print("max_=",max_)
buket=[0 for i in range(max_+1)]
#s输出空桶原始状态
print("buket:",buket)
for n in range(len(nums)):
buket[nums[n]]+=1#nums中元素在buket中的位置加一
#输出现在的buket
print(buket)
i=0
for m in range(len(buket)):
while buket[m]>0:#只有大于0的位置才出现过数字
nums[i]=m #将位置转化为数字
buket[m]-=1 #此位置上的数字减一(大于1的表示出现过多次)
i+=1
return nums

y=BuketSort()
print(y.buket_sort([2,3,5,7,1,4,6,15,5,2,7,9,10,15,9,17,12]))
发布于2019-12-12

回复列表

  • 内容加载中...

说点什么...

老实人灬? [1级]

哦,完全看不懂
发布于2019-12-12

回复列表

  • 内容加载中...

说点什么...

小亚 [3级]

没事
发布于2019-12-12

回复列表

  • 内容加载中...

说点什么...
登录注册 后才可进行评论
签到
16人签到
已签0天
  • 46634帖子
  • 1936793热点量
  • 184968火热值