插入排序实现&&选择排序实现
萌新刚刚开始学习算法,第一步是学习排序,毕竟算法的四大块“排序,查找,图,字符串”里面,排序是第一位的(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,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...
随机推荐
- Angular4+路由
路由的作用就是(导航):会加载与请求路由相关联的组件,并获取特定路由的相关数据,这允许我们通过控制不同的路由,获取不同的数据,从而渲染不同的页面: 几种常见的路由配置: Angular路由器是一个可选 ...
- oracle查看表空间下数据文件
下面两个数据字典视图就知道了.查看有哪些表空间:select * from dba_tablespaces;查看有哪些数据文件在哪个表空间中:select * from dba_data_files; ...
- YAML书写规范
1. 认识 YAML YAML是一个类似 XML.JSON 的标记性语言.YAML 强调以数据为中心,并不是以标识语言为重点.因而 YAML 本身的定义比较简单,号称"一种人性化的数据格式语 ...
- 1.NET是什么
- c:if true、false都显示
看了半天,最后发现jstl标签库没有引入! <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core ...
- JDK自带的日志Logging
OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...
- Junit4X系列--hamcrest的使用
OK,在前面的一系列博客里面,我整理过了Assert类下面常用的断言方法,比如assertEquals等等,但是org.junit.Assert类下还有一个方法也用来断言,而且更加强大.这就是我们这里 ...
- C语言学习之选择排序
上一篇文章中讲C语言排序中的比较常见的(交换)冒泡排序,那么这篇文章也将以新手个人的经历来讲同样比较常见而实用的数组排序之选择排序. 选择排序,从字面上看是通过选择来进行排序.其实它的用法就是通过选择 ...
- CU社区shell板块awk十三问整理
CU社区shell板块awk十三问整理 一.RS="" 当 RS="" 时,会将\n强制加入到FS变量中,因为RS为空时,是将连续多空行作为分隔符,近似于\n\ ...
- iOS UITableView左滑操作功能的实现(iOS8-11)
WeTest 导读 本文主要是介绍下iOS 11系统及iOS 11之前的系统在实现左滑操作功能上的区别,及如何自定义左滑的标题颜色.字体大小. 一.左滑操作功能实现 1.如果左滑的时候只有一个操作按钮 ...