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

简单排序

冒泡法:两两比较大小,交换位置
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
下一篇 2017-09-23

相关推荐

  • 文本三剑客之sed用法总结

    描述:    sed是Stream EDitor(行编辑器)的简写,是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你…

    Linux干货 2016-08-10
  • N25第二周视频作业:用户、组与权限管理详解

    此篇博客是根据视频要求写的,因为马哥在视频中说了,用户组、权限在linux运维过程中比较重要,所以一定要深入学习 首先,先介绍一下用户、组与权限是什么:     用户:用户时指你在服务器上的标识,通过不同类型的用户,你享受到不同的待遇,而待遇就是权限的大小。每个用户在服务器上都有唯一的id标识,即使你将此用户删除,再建…

    Linux干货 2016-11-26
  • 如何自建系统内部 yum 仓库

       准备:     a.素材:一套centos6.9和一套centos7.3的ISO镜像光盘     环境:1.centos6.9和centos7.3,安装好的系统各一套(土豪随意 )     b.建立前请关闭防火墙,防止防火墙的干扰     &n…

    2017-08-05
  • 文本处理工具

    1.cat 主要三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename << EOF ….>EOF (只能创建新文件,不能编辑已有文件);cat向已经存在的文件追加内容:cat >> file <<EOF…>EOF 3.将几…

    2017-07-29
  • 磁盘分区、软RAID创建及shell脚本参数传递,for循环,运算表达式应用 1、创建一个10G分区,并格式为ext4文件系统。 先使用fdisk工具创建一个10G的新分区。使用fdisk打开要创建磁盘分区的物理设备fdisk /dev/sdb,然后使用n指令创建新的分区,分区类型选此处选择为主分区,第一个柱面使用默认的1,最后的柱面,使用+10G这种表示方…

    Linux干货 2016-12-26
  • Bash Shell中的for循环和运算表达式应用

    Bash Shell中的for循环和运算表达式应用 1、写一个脚本 实现以下功能: 接受一个以上文件路径作为参数, 显示每个文件拥有的行数,总结说明本次共为几个文件统计了其行数。设定此脚本至少需要一个参数并给出提示,$#表示参数的个数。将脚本提供的所有参数组成一个列表放入for语句依次进行循环执行echo "$i has $(wc -l $i | …

    Linux干货 2016-12-13