鱼C论坛

 找回密码
 立即注册
查看: 368|回复: 7

[已解决]请问这属于哪种排序算法?

[复制链接]
最佳答案
3 
发表于 2018-2-13 18:12:36 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1. list1=[6,8,1,3,5]
  2. length=len(list1)
  3. for i in range(length):
  4.     for j in range(length):
  5.         if list1[i]<list1[j]:
  6.             list1[i],list1[j]=list1[j],list1[i]
  7. print(list1)
复制代码

这是我自己写的排序算法,就是不清楚到底属于哪种排序
最佳答案
2018-2-13 19:39:21
本帖最后由 DarkmasterSugar 于 2018-2-13 19:45 编辑

你这严格来说只能算交换排序,冒泡排序要求比较的是相邻元素(冒泡也是交换排序的一种)
冒泡是这么写的
  1. list1 = [6,8,1,3,5]
  2. length = len(list1)
  3. for i in range(length):
  4.     for j in range(length - 1):
  5.         if list1[j] > list1[j + 1]: # 注意比较的是相邻2个
  6.             list1[j], list1[j + 1] = list1[j + 1], list1[j]
  7. print(list1)
复制代码

而且事实上冒泡排序只需要n-1趟冒泡,是稳定排序,上面排序核心部分甚至可以改成
  1. for i in range(length - 1): # i实际上是冒泡趟数
  2.     for j in range(length - 1 - i): # j是实际用来排序的索引
  3.         if list1[j] > list1[j + 1]:
  4.             list1[j], list1[j + 1] = list1[j + 1], list1[j]
复制代码
最佳答案
346 
发表于 2018-2-13 18:20:05 | 显示全部楼层
冒泡排序算法
最佳答案
346 
发表于 2018-2-13 18:20:26 | 显示全部楼层
一、冒泡排序

基本思想:从第一个元素开始,每每相邻的两个元素进行比较,若前者比后者大则交换位置。最后两个相邻元素比较完成后,最大的元素形成,然后再次从头开始进行比较,若元素个数为n+1个,则总共需要进行n轮比较就可完成排序(n轮比较后,n个最大的元素已经形成,最后一个元素当然是最小的,就不用再比了)。每轮比较中,每形成一个最大的元素,下一轮比较的时候 就少比较一次,第一轮需要比较n次,第二轮需要比较n-1次,以此类推,第n轮(最后一轮)只需要比较1次就可。这样,列表就排好序了。

按照上面的分析,我们需要两个循环,外循环控制轮数,内循环控制每轮的次数。
最佳答案
3 
 楼主| 发表于 2018-2-13 18:40:37 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2018-2-13 18:20
一、冒泡排序

基本思想:从第一个元素开始,每每相邻的两个元素进行比较,若前者比后者大则交换位置。最 ...

有个地方不太理解,如果像你说的是每每相邻的两个数比较,那应该是list1[j]和list1[j + 1]比较,可代码中是list1和list1[j]比较,用外循环对应的数和内循环对应的数比较,如第一轮循环用list1[0]和list1中的每一个元素比较,找到一个大于list1[0]的数,然后交换位置。我觉得这和您所述的冒泡排序不太一样啊
最佳答案
3 
 楼主| 发表于 2018-2-13 19:00:54 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2018-2-13 18:20
一、冒泡排序

基本思想:从第一个元素开始,每每相邻的两个元素进行比较,若前者比后者大则交换位置。最 ...

我模拟了一下排序过程,大致是这样:
IMG_20180213_185944.jpg
最佳答案
17 
发表于 2018-2-13 19:39:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 DarkmasterSugar 于 2018-2-13 19:45 编辑

你这严格来说只能算交换排序,冒泡排序要求比较的是相邻元素(冒泡也是交换排序的一种)
冒泡是这么写的
  1. list1 = [6,8,1,3,5]
  2. length = len(list1)
  3. for i in range(length):
  4.     for j in range(length - 1):
  5.         if list1[j] > list1[j + 1]: # 注意比较的是相邻2个
  6.             list1[j], list1[j + 1] = list1[j + 1], list1[j]
  7. print(list1)
复制代码

而且事实上冒泡排序只需要n-1趟冒泡,是稳定排序,上面排序核心部分甚至可以改成
  1. for i in range(length - 1): # i实际上是冒泡趟数
  2.     for j in range(length - 1 - i): # j是实际用来排序的索引
  3.         if list1[j] > list1[j + 1]:
  4.             list1[j], list1[j + 1] = list1[j + 1], list1[j]
复制代码
最佳答案
346 
发表于 2018-2-13 19:51:03 | 显示全部楼层
鱼油127327 发表于 2018-2-13 19:00
我模拟了一下排序过程,大致是这样:

交换算法
最佳答案
3 
 楼主| 发表于 2018-2-13 23:59:26 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2018-2-13 19:51
交换算法

感谢大家!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-16 14:37

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表