昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~


一、冒泡排序

  1. # 冒泡排序
  2. class BubbleSort(object):
  3. def __init__(self, data_list):
  4. self.data_list = data_list
  5. self.length = len(data_list)
  6. # 简单粗暴的排序方式
  7. def b_sort(self):
  8. data_list = list(self.data_list)
  9. for i in range(self.length):
  10. print('**************第%s轮循环**************' % (i + 1))
  11. index_len = self.length
  12. for index in range(index_len - 1):
  13. print(index)
  14. if data_list[index] > data_list[index + 1]:
  15. data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
  16. return data_list
  17.  
  18. # 优化后美丽动人又可爱的冒泡排序
  19. def new_b_sort(self):
  20. data_list = list(self.data_list)
  21. for i in range(self.length):
  22. print('**************第%s轮循环**************' % (i + 1))
  23. index_len = self.length
  24. mark = False
  25. for index in range(index_len - 1 - i):
  26. print(index)
  27. mark = True
  28. if data_list[index] > data_list[index + 1]:
  29. data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
  30. mark = False
  31. if mark:
  32. break
  33. return data_list
  34.  
  35. data_list = [2, 3, 1, 7, 4, 3]
  36. bubblesort = BubbleSort(data_list)
  37. res1 = bubblesort.b_sort()
  38. print(res1)
  39. res2 = bubblesort.new_b_sort()
  40. print(res2)

二、鸡尾酒排序

  1. # 鸡尾酒排序
  2. class CocktailSort(object):
  3. def __init__(self, data_list):
  4. self.data_list = data_list
  5. self.length = len(data_list)
  6. # 简单粗暴的排序方式
  7. def c_sort(self):
  8. data_list = list(self.data_list)
  9. for i in range(self.length):
  10. print('**************第%s轮循环**************' % (i + 1))
  11. index_len = self.length
  12. print('左--->右')
  13. for index in range(index_len - 1):
  14. print(index)
  15. if data_list[index] < data_list[index + 1]:
  16. data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
  17. print('右--->左')
  18. index_len = self.length
  19. for index in range(index_len - 1):
  20. print(index)
  21. if data_list[index] > data_list[index + 1]:
  22. data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
  23. return data_list
  24. # 优化后俏皮美丽又懂事的鸡尾酒排序
  25. def new_c_sort(self):
  26. data_list = list(self.data_list)
  27. for i in range(self.length):
  28. print('**************第%s轮循环**************' % (i + 1))
  29. index_len = self.length
  30. mark = False
  31. print('左--->右')
  32. for index in range(index_len - 1- i):
  33. mark = True
  34. print(index)
  35. if data_list[index] < data_list[index + 1]:
  36. data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
  37. mark = False
  38. print('右--->左')
  39. index_len = self.length
  40. for index in range(i, index_len - 1):
  41. mark = True
  42. print(index)
  43. if data_list[index] > data_list[index + 1]:
  44. data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
  45. mark = False
  46. if mark:
  47. break
  48. return data_list
  49.  
  50. data_list = [2, 3, 1, 7, 4, 3]
  51. cocktailsort = CocktailSort(data_list)
  52. res1 = cocktailsort.c_sort()
  53. res2 = cocktailsort.new_c_sort()
  54. print(res1)
  55. print(res2)

冒泡排序和鸡尾酒排序(code)的更多相关文章

  1. java-数组排序--冒泡排序、鸡尾酒排序、地精排序

    冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定时间复杂度:O(n2) public st ...

  2. 鸡尾酒排序Cocktail Sort (双向冒泡排序)

    鸡尾酒排序 鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都 ...

  3. js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】

    [生成规定数量不重复随机数] function creatRandom( num ){ var randomLen = num, ranArr = [], thisRan = null, whileO ...

  4. Hark的数据结构与算法练习之鸡尾酒排序

    算法说明 鸡尾酒排序又叫定向冒泡排序,鸡尾酒搅拌排序,搅拌排序,涟漪排序,回来排序,快乐小时排序. 鸡尾酒排序是交换排序的一种,它是冒泡排序的一个轻微的变种.冒泡是从低向高比较排序,鸡尾酒从低向高,从 ...

  5. 鸡尾酒排序Cocktail sort

    鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 3 4 5 1] 第二步迭代,3 < 4不换 [ ...

  6. 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现

    首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...

  7. 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)

    如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...

  8. JavaScript算法(冒泡排序、选择排序与插入排序)

    冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...

  9. ObjC语法练习 冒泡排序、选择排序、矩阵相乘

    用OC实现的冒泡排序.选择排序.矩阵相乘,纯粹是用来练习语法. 冒泡排序,程序如下: void bubbleSort() { //初始化数组 NSMutableArray *array1 = [[NS ...

随机推荐

  1. 聊一聊Redis事务

    没错,Redis也有事务管理,但是功能很简单,在正式开发中也并不推荐使用.但是面试中有可能会问到,所以本文简单谈一谈Redis的事务. 通过这篇文章,你会了解 Redis为什么要提供事务? Redis ...

  2. PyCharm编程软件详细安装教程

    PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...

  3. 用python的turtle作图(二)动画吃豆人

    本文是用python的turtle作图的第二篇,通过这个例子可以了解动画的原理,用python自带的turtle库制作一些小动画. 1.问题描述 在上一篇"用python的turtle作图( ...

  4. Solution -「NOI 模拟赛」出题人

    \(\mathcal{Description}\)   给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...

  5. Solution -「LOCAL」画画图

    \(\mathcal{Description}\)   OurTeam.   给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...

  6. Linux编译安装升级bash5.1

    线上服务器有次做漏洞扫描时,被扫描出有bash漏洞.平时还是比较少遇到有bash的漏洞,好在编译升级比较简单. 测试环境系统:CentOS.Ubuntu 一.下载官网最新bash版本 bash官网下载 ...

  7. 后台运行程序-服务器、python

    0前言 最近遇到一个需求,我有一个很小的python程序,需要一直在服务器器上跑,但是我不想一直开着浏览器或者Xshell 7,所以记录一下怎么解决的. 用到的指令是nohup 具体代码就两行 sou ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式

    在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...

  9. Dubbo源码剖析一之整体架构设计

    Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中进行Dubbo职能上的简单介绍,下面就其内部进行详细探究: 1.Dubbo调用关系 这个图是不是很熟 ...

  10. vue实例中的watch属性

    watch 就是监听,当数据发生改变的时候就执行 data:{ num1:1, num2:2 }, watch:{ num1(newValue){ }, num2(newValue,oldValue) ...