萌新刚刚开始学习算法,第一步是学习排序,毕竟算法的四大块“排序,查找,图,字符串”里面,排序是第一位的(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作为缓存列表

插入排序实现&&选择排序实现的更多相关文章

  1. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  2. PHP实现快速排序、插入排序、选择排序

    1.快速排序 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都 ...

  3. Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析

    阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...

  4. 三种排序算法python源码——冒泡排序、插入排序、选择排序

    最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...

  5. 基本的排序算法C++实现(插入排序,选择排序,冒泡排序,归并排序,快速排序,最大堆排序,希尔排序)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8529525.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  6. JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  7. 三、排序算法总结一(冒泡排序,插入排序,选择排序)(C++版本)

    一.引言 对于各种排序算法也算是有了一定的了解,所以这里做一个总结. 二.冒泡排序法. 这是比较经典的排序算法,主要是通过内外两层的循环比较,使得乱序变为顺序. 下面是一个测试代码 #include ...

  8. 插入排序,选择排序,冒泡排序等常用排序算法(java实现)

    package org.webdriver.autotest.Study; import java.util.*; public class sort_examp{ public static voi ...

  9. php 实现冒泡算法排序、快速排序、选择排序,插入排序

    许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...

随机推荐

  1. 微调数据库表结构,30 分钟搞定 WordPress 数据库查询缓慢问题

    同事的美女图片站,基于 WordPress 搭建的,因为数据越来越多,变得慢,我从 PHP slow log 里面看出是 WordPress 有些查询总是很慢,即使已经安装了页面缓存插件,但是由于页面 ...

  2. Maven项目pom.xml 标签含义

    project:pom.xml文件中的顶层元素: modelVersion:指明POM使用的对象模型的版本.这个值很少改动. groupId:指明创建项目的组织或者小组的唯一标识.GroupId是项目 ...

  3. python arvg用法

    转自:http://blog.csdn.net/vivilorne/article/details/3863545 在学python的过程中,一直弄不明白sys.argv[]的意思,虽知道是表示命令行 ...

  4. java面向对象的三大特性——继承

    ul,ol { margin: 0; list-style: none; padding: 0 } a { text-decoration: none; color: inherit } * { ma ...

  5. python_如何统计序列中元素

    问题1: 随机数列[12,5,8,7,8,9,4,8,5,...] 中出现次数最高的3个元素,他们出现的次数 问题2: 对某英文文章的单词,进行词频统计,找出出现次数最搞得10个单词,他们出现的次数是 ...

  6. .net Core学习笔记2 实现列表的条件筛选,排序,分页

    打开vs,完善上次"简单粗暴"的项目 发现上次的实体类的导航属性有点问题,这是更改后的 namespace ProductMvc.Models { public class Pro ...

  7. 译-Web Service剖析: XML, SOAP 和WSDL 用于独立于平台的数据交换

    本文是翻译内容,原文参见: Anatomy of a Web Service: XML, SOAP and WSDL for Platform-independent Data Exchange We ...

  8. linkin大话面向对象--类和对象

    我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...

  9. 重置CentOS 7的Root密码

    centos7与centos6有很多修改,不一样了,打算写几篇关于日常用到的改动 修改root密码 centos7的用户模式跟6有所不同 1 - 在启动grub菜单,选择编辑选项启动 2 - 按键盘e ...

  10. 【转】C++易混知识点3. New Operator, Operator New, Placement New 实例分析,比较区别

    我们知道,C++中引入了New 这个内置符号,很大方便了指针的使用,程序员不必关注与这块堆上新分配的内存是如何来的,如何初始化的,然后如何转换为我们想要的类型指针的.现在,我们重点来分析下这个NEW内 ...