冒泡排序和鸡尾酒排序(code)
昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~
一、冒泡排序
- # 冒泡排序
- class BubbleSort(object):
- def __init__(self, data_list):
- self.data_list = data_list
- self.length = len(data_list)
- # 简单粗暴的排序方式
- def b_sort(self):
- data_list = list(self.data_list)
- for i in range(self.length):
- print('**************第%s轮循环**************' % (i + 1))
- index_len = self.length
- for index in range(index_len - 1):
- print(index)
- if data_list[index] > data_list[index + 1]:
- data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
- return data_list
- # 优化后美丽动人又可爱的冒泡排序
- def new_b_sort(self):
- data_list = list(self.data_list)
- for i in range(self.length):
- print('**************第%s轮循环**************' % (i + 1))
- index_len = self.length
- mark = False
- for index in range(index_len - 1 - i):
- print(index)
- mark = True
- if data_list[index] > data_list[index + 1]:
- data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
- mark = False
- if mark:
- break
- return data_list
- data_list = [2, 3, 1, 7, 4, 3]
- bubblesort = BubbleSort(data_list)
- res1 = bubblesort.b_sort()
- print(res1)
- res2 = bubblesort.new_b_sort()
- print(res2)
二、鸡尾酒排序
- # 鸡尾酒排序
- class CocktailSort(object):
- def __init__(self, data_list):
- self.data_list = data_list
- self.length = len(data_list)
- # 简单粗暴的排序方式
- def c_sort(self):
- data_list = list(self.data_list)
- for i in range(self.length):
- print('**************第%s轮循环**************' % (i + 1))
- index_len = self.length
- print('左--->右')
- for index in range(index_len - 1):
- print(index)
- if data_list[index] < data_list[index + 1]:
- data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
- print('右--->左')
- index_len = self.length
- for index in range(index_len - 1):
- print(index)
- if data_list[index] > data_list[index + 1]:
- data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
- return data_list
- # 优化后俏皮美丽又懂事的鸡尾酒排序
- def new_c_sort(self):
- data_list = list(self.data_list)
- for i in range(self.length):
- print('**************第%s轮循环**************' % (i + 1))
- index_len = self.length
- mark = False
- print('左--->右')
- for index in range(index_len - 1- i):
- mark = True
- print(index)
- if data_list[index] < data_list[index + 1]:
- data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
- mark = False
- print('右--->左')
- index_len = self.length
- for index in range(i, index_len - 1):
- mark = True
- print(index)
- if data_list[index] > data_list[index + 1]:
- data_list[index], data_list[index + 1] = data_list[index + 1], data_list[index]
- mark = False
- if mark:
- break
- return data_list
- data_list = [2, 3, 1, 7, 4, 3]
- cocktailsort = CocktailSort(data_list)
- res1 = cocktailsort.c_sort()
- res2 = cocktailsort.new_c_sort()
- print(res1)
- print(res2)
冒泡排序和鸡尾酒排序(code)的更多相关文章
- java-数组排序--冒泡排序、鸡尾酒排序、地精排序
冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定时间复杂度:O(n2) public st ...
- 鸡尾酒排序Cocktail Sort (双向冒泡排序)
鸡尾酒排序 鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都 ...
- js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】
[生成规定数量不重复随机数] function creatRandom( num ){ var randomLen = num, ranArr = [], thisRan = null, whileO ...
- Hark的数据结构与算法练习之鸡尾酒排序
算法说明 鸡尾酒排序又叫定向冒泡排序,鸡尾酒搅拌排序,搅拌排序,涟漪排序,回来排序,快乐小时排序. 鸡尾酒排序是交换排序的一种,它是冒泡排序的一个轻微的变种.冒泡是从低向高比较排序,鸡尾酒从低向高,从 ...
- 鸡尾酒排序Cocktail sort
鸡尾酒排序基于冒泡排序,双向循环 还是看例子吧,给定待排数组[2 3 4 5 1] 第一趟过去时的每一步 第一步迭代,2 < 3不换 [2 3 4 5 1] 第二步迭代,3 < 4不换 [ ...
- 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现
首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法: ...
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
如果你觉得我的有些话有点唐突,你不理解可以想看看前一篇<C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析>. 这几天闲着没事就写了一篇<C++之冒泡排序. ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- ObjC语法练习 冒泡排序、选择排序、矩阵相乘
用OC实现的冒泡排序.选择排序.矩阵相乘,纯粹是用来练习语法. 冒泡排序,程序如下: void bubbleSort() { //初始化数组 NSMutableArray *array1 = [[NS ...
随机推荐
- 聊一聊Redis事务
没错,Redis也有事务管理,但是功能很简单,在正式开发中也并不推荐使用.但是面试中有可能会问到,所以本文简单谈一谈Redis的事务. 通过这篇文章,你会了解 Redis为什么要提供事务? Redis ...
- PyCharm编程软件详细安装教程
PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...
- 用python的turtle作图(二)动画吃豆人
本文是用python的turtle作图的第二篇,通过这个例子可以了解动画的原理,用python自带的turtle库制作一些小动画. 1.问题描述 在上一篇"用python的turtle作图( ...
- Solution -「NOI 模拟赛」出题人
\(\mathcal{Description}\) 给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...
- Solution -「LOCAL」画画图
\(\mathcal{Description}\) OurTeam. 给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...
- Linux编译安装升级bash5.1
线上服务器有次做漏洞扫描时,被扫描出有bash漏洞.平时还是比较少遇到有bash的漏洞,好在编译升级比较简单. 测试环境系统:CentOS.Ubuntu 一.下载官网最新bash版本 bash官网下载 ...
- 后台运行程序-服务器、python
0前言 最近遇到一个需求,我有一个很小的python程序,需要一直在服务器器上跑,但是我不想一直开着浏览器或者Xshell 7,所以记录一下怎么解决的. 用到的指令是nohup 具体代码就两行 sou ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式
在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...
- Dubbo源码剖析一之整体架构设计
Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中进行Dubbo职能上的简单介绍,下面就其内部进行详细探究: 1.Dubbo调用关系 这个图是不是很熟 ...
- vue实例中的watch属性
watch 就是监听,当数据发生改变的时候就执行 data:{ num1:1, num2:2 }, watch:{ num1(newValue){ }, num2(newValue,oldValue) ...