博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】用Python实现各种排序算法
阅读量:6083 次
发布时间:2019-06-20

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

以下代码均为python3版本的代码

# 冒泡排序# 比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。def bubbleSort(list):    if list != None:        if len(list) ==1:            pass        else:            for i in range(len(list)):                for j in range(len(list)-1-i):                    if list[j]>list[j+1]:                        list[j],list[j+1] = list[j+1],list[j]if __name__ == '__main__':    list1 = [2,3,5,7,8,9,6,54,1,42]    bubbleSort(list1)    print(list1)
# 插入排序# 将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。def insertSort(list):    if list != None:        if len(list) == 1:            pass        else:            for i in range(1,len(list)):                temp = list[i]                for j in range(i):                    if list[j]>list[i]:                        for k in range(i,j,-1):                            list[k] = list[k-1]                        list[j] = tempif __name__ == '__main__':    list1 = [2,3,5,7,8,9,6,54,1,42]    print(list1)    insertSort(list1)    print(list1)
# 快速排序# 通过一趟排序将要排序的数据分割成独立的两部分# 其中一部分的所有数据都比另外一部分的所有数据都要小# 然后再按此方法对这两部分数据分别进行快速排序# 整个排序过程可以递归进行# 以此达到整个数据变成有序序列。def first_sort(numbers,i,j):    temp = numbers[i]    while i != j:        while i
temp: j = j-1 numbers[i] = numbers[j] while i
# 选择排序# 从所有序列中先找到最小的,然后放到第一个位置# 之后再看剩余元素中最小的,放到第二个位置……# 以此类推,就可以完成整个的排序工作。def selectSort(list):    if list != None:        for i in range(len(list)):            min = i            for j in range(i+1,len(list)):                if list[min]>list[j]:                    min = j            if min != i:                list[min],list[i] = list[i],list[min]if __name__ == '__main__':    list1 = [2,3,5,7,8,9,6,54,1,42]    print(list1)    selectSort(list1)    print(list1)
# 希尔排序# 先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序# 然后依次缩减增量再进行排序,# 待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。def shellSort(data,flag):    '''    :param data: list, to be sorted    :param flag: 0 -> asc, 1 -> desc    :return: a new sorted list    '''    retData=[]    for item in data:        retData.append(item)    count = len(retData)    step = count // 2 # python3    while step > 0:        i = 0        while i< count:            j = i + step            while j < count:                t = retData.pop(j)                k = j - step                # asc                if flag == 0:                    while k>= 0:                        if t >= retData[k]:                            retData.insert(k+1,t)                            break                        k = k - step                    if k < 0:                        retData.insert(0,t)                # desc                elif flag == 1:                    while k >= 0:                        if t <= retData[k]:                            retData.insert(k+1, t)                            break                        k = k - step                    if k < 0:                        retData.insert(0, t)                j = j + step            i = i + 1        step = step//2    return retDataif __name__ == '__main__':    list1 = [2, 3, 5, 7, 8, 9, 6, 54, 1, 42]    data = shellSort(list1,0)    print('ASC:')    print(data)    data = shellSort(list1, 1)    print('DESC:')    print(data)

【转自】http://www.kuqin.com/shuoit/20150702/346879.html

稍有修改

mark down

转载地址:http://wwkwa.baihongyu.com/

你可能感兴趣的文章
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
C#数据采集类
查看>>
quicksort
查看>>
【BZOJ2019】nim
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>