设为首页 收藏本站
查看: 3429|回复: 0

[经验分享] Python实现经典排序算法

[复制链接]

尚未签到

发表于 2018-8-14 08:52:33 | 显示全部楼层 |阅读模式
  1.冒泡排序:
  设计思想:
  1.依次对比左右相邻的两个数字,让最大的数,排到队末,此方法类似水泡,从水底逐渐上浮逐渐变大;
  2.将上述方法执行len(array)遍,让所有较大的数据都依次冒出来,从小到大的方式排到队末,整个列表形成一个升序,排序则完成.
  def maopao(array):
  for i in range(len(array)):
  for j in range(len(array)-1):
  if array[j] > array[j + 1]:
  array[j], array[j + 1] = array[j + 1], array[j]
  return array
  2.鸡尾酒排序
  设计思想:
  1.作为冒泡排序的改进,顶层循环减少一半 range(len(array)/2);
  2.每次对一分二的两个列表分别进行冒泡排序,直到排序完成,实际测试对比冒泡排序效率提升50%左右。
  def cocktail_sort(l):  # 鸡尾酒排序
  size = len(l)
  sign = 1
  for i in range(size / 2):
  if sign:
  sign = 0

  for j in range(i,>  -i是为了减少循环的次数,当i=0时执行此循环就已经获取末位最大值
  if l[j] > l[j + 1]:
  l[j], l[j + 1] = l[j + 1], l[j]
  for k in range(size - 2 - i, i, -1):  # -2 上面已经获取末位最大值无须循环,
  -i同上为了减少循环次数
  if l[k] < l[k - 1]:
  l[k], l[k - 1] = l[k - 1], l[k]
  sign = 1
  else:
  break
  return l
  3.快速排序:
  设计思想:
  1.以第一个数作为基础参考,依次和列表中每一个数进行对比;
  2.分别定义左右两个空列表,小于第一个参考数字放在左边空列表,大于放在右边空列表;
  3.把左右两个列表作为参数传给排序函数本身,赋值给一个变量,让其递归执行排序;
  4.返回左列表排序结果 + [基础参考值] + 右列表排序结果,即最终排序好的结果
  def quick_sort(array):  # 快速排序
  if not array or len(array) == 1:
  return array
  base = array[0]
  _left, _right = [], []
  for i in array[1:]:
  if i >= base:
  _right.append(i)
  else:
  _left.append(i)
  _left = quick_sort(_left)
  _right = quick_sort(_right)
  return _left + [base] + _right
  4.插入排序:
  设计思想:
  1.从列表中第二个值开始循环对比,如果前一个比当前数大,把当前的数多存一份;
  2.当,前一个值比需要插入的值大时,把前面的值依次往后挪(当前位置的值等于前一个位置值),while 循环到队首;
  3.直到前面的值小于等于需要插入值,用多存的数据插入到对应位置上;
  def insert_sort(array):
  for i in range(1, len(array)):
  if array[i - 1] > array:
  temp = array
  while i > 0 and array[i-1] > temp:  # 用待插入的temp和前面已排序数据对比,找把前面的值依次往后挪,直到前面值小于等于需要插入值,用多存的数据插入到对应位置。
  array = array[i - 1]  #  依次把前一个数往后挪一位
  i -= 1
  array = temp
  return array
  5.归并排序
  设计思想:
  1.从中间开始讲列表递归分解成单个列表;
  2.从单个列表递归排序组合成一个有序的列表;
  def mergesort(array):
  if len(array) <= 1:
  return array
  mid = len(array) / 2
  _left = mergesort(array[:mid])  # 从中间开始,左边依次递归分解成单个列表
  _right = mergesort(array[mid:])  # 从中间开始,右边依次递归分解成单个列表
  return merge(_left,_right)  # 从单个列表依次递归排序组合成有序的列表
  def merge(_left,_right):
  result = []
  i, j = 0, 0
  while i < len(_left) and j < len(_right):
  if _left <= _right[j]
  result.append(_left)
  i += 1
  else:
  result.append(_right)
  j += 1
  result += _left[i:]
  result += _right[j:]
  return result

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551428-1-1.html 上篇帖子: 自学python问题(1)-django连接mysql 下篇帖子: 使用python实现二维数组反转90度
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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