博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用python实现经典排序
阅读量:4329 次
发布时间:2019-06-06

本文共 2948 字,大约阅读时间需要 9 分钟。

1、冒泡排序

算法原理:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
def Bubble_list(self,list):        mlen = len(list)        while mlen>1:            index = 0            for r in range(mlen):                if list[index] > list[index + 1]:                    list[index], list[index + 1] = list[index + 1], list[index]                index = index + 1                if index == mlen - 1:                    break            mlen = mlen - 1        return list

2、选择排序

算法原理:

  1、初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;

  2、再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。

  3、以此类推,直到所有元素均排序完毕。

#简易思路是:对于list中第i个数,找出i~len(list)-1中最小的数,并于第i个数交换位置,此次循环结束后,再寻找i+1~len(list)-1中最小的数,并于第i+1个数交换位置,以此类推     def select_sort(self,list):        '''选择排序'''        for i in range(len(list)):            min = i            for r in range(i,len(list)):                if list[min] > list[r + 1]:                    min = r+1                if r == len(list) - 2:                    break            list[i],list[min]=list[min],list[i]            if i == len(list) - 2:                break        return list

 

3、插入排序

算法原理:

  1、从第一个元素开始,该元素可以认为已经被排序

  2、取出下一个元素,在已经排序的元素序列中从后向前扫描

  3、如果该元素(已排序)大于新元素,将该元素移到下一位置

  4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

  5、将新元素插入到该位置后

  6、重复步骤2~5

插入排序分为;直接插入排序、二分法插入排序、链表插入排序、希尔排序

直接插入排序:

def Insert_sort_directly(self,list):        '''直接插入排序'''        for r in range(1,len(list)):            i=r            while list[r]

二分法插入排序:

def Insert_sort_division(self,list):        '''二分法插入排序'''        if list[0]>list[1]:        #由于二分法是在两个数的情况下比较,因此首先给list中前两位数排序            list[0],list[1]=list[1],list[0]        for r in range(2,len(list)):            i=r            lindex=0 #左边界            rindex=i-1 #右边界            while rindex-lindex!=1: #判断list[r]的区间,直至左边界和右边界为邻近边界                mindex=(lindex+rindex)/2                if list[r]>list[mindex]:                    lindex=mindex                else:                    rindex=mindex            if list[r]
list[rindex]: list.insert(rindex+1, list[r]) else: list.insert(rindex,list[r]) del list[r+1] return list

希尔排序:

先将要排序的一组记录按某个增量dn/2,n为要排序数的个数)分成若干组子序列,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。继续不断缩小增量直至为1,最后使用直接插入排序完成排序。

def Insert_sort_shell(self,list):        '''希尔排序'''        def form_list(d,list):            '''将list按照增量d分割成若干个子序列'''            allList=[]            for r in range(d):                i=r                sublist = []                while i
len(r) - 1: continue list.append(r[i]) i = i + 1 return list d=len(list)/2 while d!=0: allList=form_list(d,list) list=sublist_sort(allList) d=d/2 return list

  

  

  

转载于:https://www.cnblogs.com/cuisygan/p/7724914.html

你可能感兴趣的文章
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JS中各种跳转解析
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Ecust OJ
查看>>
P3384 【模板】树链剖分
查看>>
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
Equivalent Strings
查看>>
flume handler
查看>>
收藏其他博客园主写的代码,学习加自用。先表示感谢!!!
查看>>
H5 表单标签
查看>>
su 与 su - 区别
查看>>
C语言编程-9_4 字符统计
查看>>
在webconfig中写好连接后,在程序中如何调用?
查看>>
限制用户不能删除SharePoint列表中的条目(项目)
查看>>
【Linux网络编程】使用GDB调试程序
查看>>