插入排序实现&&选择排序实现
萌新刚刚开始学习算法,第一步是学习排序,毕竟算法的四大块“排序,查找,图,字符串”里面,排序是第一位的(PS:今天才知道算法提供的只是一个程序编写思路,一直以为是一个函数,难怪传入参数怎么也实现不出来,好气啊)
话不多说,先上源码!
选择排序:
#coding:utf8 __author__ = "zhoumi" class Seltsort(object):
def __init__(self,list):
self.list = list
def sort(self):
#错误示例
# for num in self.list:
# for des in self.list:
# if des > num:
# continue
# elif des == num:
# continue
# else:
# tmp = num
# num = des
# des = tmp
for i in range(len(self.list) - 1):
for j in range(i,len(self.list)):
#该循环体的len(self.list)不需要-1,否则最后一个数字无法参与排序
if self.list[j] >= self.list[i]:
continue
else:
tmp = self.list[i]
self.list[i] = self.list[j]
self.list[j] = tmp
return self.list
if __name__ == "__main__":
list = [123, 5493, 599, 921,264, 570, 435,444]
st = Seltsort(list)
print(st.sort())
萌新第一次写的时候,发现总是有最后一个数字不参与排序,把我给气的!后来经过各种折腾(写了老长老长的一段代码),还是没有解决掉,无奈只好找度娘,他告诉我算法的实现一定要注意循环体的执行次数,然后我把21行的len(self.list)-1改成了len(self.list),大功告成!
插入排序:
#coding:utf8 #插入排序(默认要返回顺序递增列表),即从左往右选定基数,将该基数以所在位置为起点,从右往左比较大小
#如果碰到a<基数<a+1,此时将基数插入
class Insertsort(object):
def __init__(self,list):
self.list = list
#错误示例
# def sort(self):
# #外层循环负责取base
# for i in range(len(self.list) - 1):
# #内层循环负责取base左边的值
# for j in range(i):
# if i == 0:
# #此时list[i]为第一个值,不需要作比较
# break
# #else负责定位比list[i]大的
# else:
# if self.list[i] < self.list[j]:
# self.tmp = self.list[i]
# self.count = j
# for k in range(self.count,i+1):
# if i == k:
# break
# else:
# self.list[i] = self.list[i-1]
# self.list[self.count] = self.tmp
# i -= 1
#---------------------------------------------------------------------------------------------------- def sort(self):
for i in range(len(self.list)):
for j in range(i+1):
if self.list[i] < self.list[j]:
tmplist = self.list[j:i+1]
count = i - j
while True:
if count != 0:
tmplist.append(tmplist.pop(0))
count -= 1
else:
break
self.list[j:i+1] = tmplist
else:
continue
return self.list if __name__ == "__main__":
list = [1,3,4,5,8,9,2,6,7,0]
inst = Insertsort(list)
print(inst.sort())
这段插入排序的实现相对来讲比较容易,tmplist.append(tmplist.pop[0])实现的是将末位移动至首位,例如[2,3,4,1]或者[10,11,12,9],但是这个实现对内存的开销比较大,因为增加了一个tmplist作为缓存列表
插入排序实现&&选择排序实现的更多相关文章
- C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...
- PHP实现快速排序、插入排序、选择排序
1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都 ...
- Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析
阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...
- 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8529525.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- 三、排序算法总结一(冒泡排序,插入排序,选择排序)(C++版本)
一.引言 对于各种排序算法也算是有了一定的了解,所以这里做一个总结. 二.冒泡排序法. 这是比较经典的排序算法,主要是通过内外两层的循环比较,使得乱序变为顺序. 下面是一个测试代码 #include ...
- 插入排序,选择排序,冒泡排序等常用排序算法(java实现)
package org.webdriver.autotest.Study; import java.util.*; public class sort_examp{ public static voi ...
- php 实现冒泡算法排序、快速排序、选择排序,插入排序
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...
随机推荐
- JavaScript URL传值过程中遇到的问题及知识点总结
JavaScript URL传值过程中遇到的问题及知识点总结 Web系统开发过程中经常用到URL进行传值,刚刚接触时不太会解析,会出现中文乱码问题等. 1.父子页面之间的传值(在一个页面中以加载ifr ...
- JavaScript Math(数学对象)
Math(数学对象) Math 算术函数和常量 Math.abs( ) 计算绝对值 Math.acos( ) 计算反余弦值 Math.asin( ) 计算反正弦值 Math.atan( ) 计算反正切 ...
- CentOS7.x机器安装Azure CLI2.0
安装Azure CLI 2.0的前提是:机器中必须有 Python 2.7.x 或 Python 3.x.如果机器中没有其中任何一个Python的版本,请及时安装 1.准备一台CentOS 7.3的机 ...
- python_如何实现可迭代对象和迭代器对象?
什么是可迭代对象? 列表.字符串 for循环的本质? for循环要确保in后面的对象为可迭代对象,如何确保? iter() 方法得到一个迭代器对象 不停.__next__() 方法对迭代器对象进行迭代 ...
- 流API--流的迭代
虽然流不是数据存储对象,但是仍然可以使用迭代器来遍历其元素,就如同使用迭代器遍历集合中的元素一样. 流API支持2类迭代器,一类是传统的Iterator,另一类是JDK8新增的Spliterator. ...
- JDBC (五)
1 使用dbutils进行一对多.多对多的开发 1.1 准备 mysql驱动的pom.xml <!-- https://mvnrepository.com/artifact/mysql/mysq ...
- HARBOR 仓库 API功能接口
1 项目管理 1.1 查看仓库中项目详细信息 curl -u "admin:Harbor12345" -X GET -H "Content-Type: ...
- math对象与数组对象
1.math对象 属性 //PI 圆周率 方法 //random 随机数 var num= Math.random(); 生成0到1的随机数//round 四舍五入var num2 ...
- 一步一步从原理跟我学邮件收取及发送 10.四句代码说清base64
经过前几篇的文章,大家应该都能预感到一定要讲解 base64 函数的内容了.是的,马上要到程序登录的代码,base64 是必须要实现的. base64 很早以前我就接触了,在项目中也很喜欢用.但每换一 ...
- 洛谷 [P3110] 驮运
题目略带一点贪心的思想,先跑三遍最短路(边权为一,BFS比SPFA高效) 一起跑总比分开跑高效,枚举两人在何点汇合,输出最小值. #include <iostream> #include ...