简单排序方法–冒泡法,简单选择排序,直接插入排序

简单排序

冒泡法:两两比较大小,交换位置
m=[1,3,4,2,5,7,6,8,9,11,32,42,52,13,15,26,19,57,53,49,80,70,69,58,48,34,67,89,92,46,75,71,73,50,48,84,24,20,28,53]
count=0
count_c=0
for i in range(len(m)):
    flag=False
    for j in range(len(m)-i-1):
        count+=1
        if m[j]<m[j+1]:
            m[j],m[j+1]=m[j+1],m[j]
            count_c+=1
            flag=True
    if not flag:
        break
print(m,count,count_c) 

简单选择排序:两两比较大小,找出极值,和两端交换
m=[1,3,4,2,5,7,6,8,9,11,32,42,52,13,15,26,19,57,53,49,80,70,69,58,48,34,67,89,92,46,75,71,73,50,48,84,24,20,28,53]
count=0
count_c=0
for i in range(len(m)//2):
    maxindex=i
    minindex=-i-1
    for j in range(i+1,len(m)-i):
        count+=1
        if m[maxindex]<m[j]:
            maxindex=j
        if m[minindex]>m[-j-1]:
            minindex=-j-1
    if i !=maxindex:
        m[i],m[maxindex]=m[maxindex],m[i]
        count_c+=1
        if i ==minindex or i ==len(m)+minindex:
            minindex=maxindex
    if -i-1 != minindex:
        m[-i-1],m[minindex]=m[minindex],m[-i-1]
        count_c+=1
print(m,count,count_c)

直接插入排序:在开头插入一个数,从第二个开始比较,通过开头的数相互替换
m=[1,3,4,2,5,7,6,8,9,11,32,42,52,13,15,26,19,57,53,49,80,70,69,58,48,34,67,89,92,46,75,71,73,50,48,84,24,20,28,53]
num=[0]+m
count=0
count_c=0
for i in range(2,len(num)):
    num[0]=num[i]
    j=i-1
    count+=1
    if num[j]<num[0]:
        while num[j]<num[0]:
            num[j+1]=num[j]
            count_c+=1
            j-=1
            num[j+1]=num[0]
num.pop(0) 
print(num,count,count_c) 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87489

(0)
10590628461059062846
上一篇 2017-09-23 15:58
下一篇 2017-09-23 18:24

相关推荐

  • Linux 终端类型

      1、 什么是终端     终端就是用户与主机进行交互的一种介质(方式),可以是虚拟的,也可以是实体的。   2、 终端种类       (1)控制台终端(/dev/console):在Linux系统中,计算机显示器通常被称为控制台终端。Console与虚拟终端相关联…

    Linux干货 2016-10-19
  • linux命令速记技巧

    linux命令速记技巧 linux命令有一定的命名规则,一个正常的coder在编码的过程中都会考虑命名的语义化,开发者对函数的命名一定也尽量遵循这个规律.了解目录所对应的英文全称有助于自己的记忆,理解记忆获得知识的留存率要远大于死记硬背.如果英文基础太差,小编建议先学好英文基本功再来学习这些命令. 命令的中文对照 命令 英文全称 中文释义 ls list 列…

    Linux干货 2017-03-25
  • 马哥教育网络班22期+第二周课程练习

    week2作业: 1.linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 (1)touch 功能:创建文件 示例:  [root@director1 example]# touch file1 file2 [root@director1 example]# ll to…

    Linux干货 2016-08-22
  • 文件管理命令及通配符练习

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例 按增删改查的思路来 增: touch filename:这个命令本身不是用来新建文件的,它是用来修改文件的时间属性,不过默认情况时当filename不存在时,它会默认建立一个空文件 mkdir: 常用参数 -p:相当于递归创建目录 -v:显示出创建过程中的信息 cp : 常用参数 -r:…

    Linux干货 2016-11-06
  • N29第一周作业:初识Linux系统

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    2018-03-04
  • Linux的发行版和它们区别跟联系

    linux的主要发行版有Debian,Slackware,RedHat三个大系列    Debian 最早由Ian Murdock于1993年创建。可以算是迄今为止,最遵循GNU规范的Linux系统。Debian最具特色的是apt-get / dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发…

    Linux干货 2017-07-02