Python中的排序

来源:互联网 发布:2015休闲食品销售数据 编辑:程序博客网 时间:2024/06/05 08:35

最近在学习Python, 想随便 写一下,Python  写一些 排序, 排序 算法 那么多,我也不一一介绍,写几个比较简单的,冒泡,选择,快排,插入排序

用 Python 实现一下,当然 也有参考 网上的写法, 相互学习吧,直接进入正题



1   冒泡排序 

冒泡排序 思想 我想大家 都应该理解就是 相邻 两个key  进行比较, 一趟排完后,肯定有一个最值 排到第一个或最后一个位置, 之后 继续这样排,最终排完。


# coding=utf-8#冒泡排序的实现'''''交换排序—冒泡排序(Bubble Sort)'''def bubble_sort(array):    length=len(array)    for i in range(length-1):        for j in range(length-1):            if array[j]>array[j+1]:                array[j],array[j+1]=array[j+1],array[j]    return arrayif __name__ == '__main__':    mylist=[1,34,6,21,98,31,7,4,36,16,47,67,37,25,2]    print(bubble_sort(mylist))

2 选择排序  :  

最基本 的思想,每次 从 待排序列 选择一个最值 ,放在 第一个位置,  之后 在从剩下的 待排序列中选择 一个最大值 放在 第二个位置, 依次类推


# coding=utf-8'''选择排序 实现Python'''def select_sort(array):    length=len(array)    for i in range(0,length):        k = i  # 寻找最小元素的下标        for j in range(i+1, length):            if array[j] < array[k]:                k = j        # 找到最小的一个下标,并且和 array[i],交换值,这样array[i],就是最小值        array[i], array[k] = array[k], array[i]    return  arrayif __name__ == '__main__':    mylist=[1,34,6,21,98,31,7,4,27,13,36,47,67,37,25,2]    # mylist = [3, 5, 4, 2, 1, 6]    print (select_sort(mylist))

3 插入排序

插入排序 , 也是类似, 基本思想, 将序列 分为已经排,未排序,  从未排序列中  依次插入到 已排序列中, 这里 就要注意 如何寻找 恰当的位置,然后 进行 插入。 我这里写的方法, 拿未排的序列的一个值 ,和 已排 序列的最后一个值进行比较,如果已排序列 较大,交换两个值。 之后 继续向前比较,如果 还是大,继续交换,如果不大了,证明已经找到了正确的位置,直接break 出来,开始下一个关键字的排序 ,即可。  看一下 实现:

# coding=utf-8'''@author:chang插入排序 insert_sort'''# 直接插入排序def insert_sort(array):    # 遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始    # x  为待排序列,从下标1开始取值,默认下标0是排好的。    for x in range(1, len(array)):        # 将该元素与已排序好的前序数组依次比较,如果该元素小,则交换        # range(x-1,-1,-1):从x-1倒序循环到0  x-1  x-2  x-3 --> 0        for i in range(x-1, -1, -1):            # 判断:如果符合条件则交换            if array[i] > array[i+1]:                array[i], array[i+1] = array[i+1], array[i]            else:                break    return arrayif __name__ == '__main__':    # mylists = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3]    # mylists = [1, 34, 6, 21, 98, 31, 7, 4, 56, 59, 27, 13, 36, 47, 67, 37, 25, 2]    mylists = [1, 4, 7, 1, 5, 25, 3, 85, 34, 75, 23, 75, 2, 0]    print(insert_sort(mylists))    


4 快速排序

快速排序, 这个 稍微有点复杂 ,只要理解 partition, 和递归 的概念, 就很容易理解了,  其实 把一个待排序列分成两组,首先 选一个key 作为基准点,通过partition 把 前面的key,都小于 基准点, 后面的都大于基准点, 这样 就是一个partition的过程。最后 partition要返回一个位置,就是 就保证了 上面说的 那个特点,前面的小于基准点,后面的大于基准点。

 这样之后, 对前面的一段待排 序列, 在进行 partition,后面的一段 也在进行partition,一直到待排序列长度 为1 , 这样就全部排完了。

# coding=utf-8'''@author:chang快速排序 实现quick_sort'''def partition(array,low,high):    #基准点定位为第一个元素    point = array[low]    while low < high:        #将大于基准点的数放于基准点的右边        while low < high and array[high] >= point:            #移到前一个元素            high = high - 1        #当不满足大于基准点,交换基准点        array[low],array[high] = array[high],array[low]        while low < high and array[low] < point:            low = low + 1        #当不满足小于基准点,交换基准点        array[low], array[high] = array[high], array[low]    #返回枢轴的位置。。。重要    return low#外层函数,由于快速排序需要三个参数,为零满足只要两个参数,定义一个外层函数调用实际操作的函数def quick_sort(array,length):    q_sort(array,0,length-1)def q_sort(array,low,high):    if low < high:        point = partition(array,low,high)        q_sort(array,low,point-1)        q_sort(array,point+1,high)if __name__ == '__main__':    mylists = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3]    quick_sort(mylists,len(mylists))    print (mylists)



总结: 本文 主要写了 Python 实现 冒泡,选择,快速排序,简单插入排序最简单的算法。如果有发现错误,欢迎一起讨论交流。


参考文档:

http://blog.csdn.net/u013719780/article/details/49201143





   分享快乐,留住感动 。 如果喜欢可以点赞哦。                                                                             2017年 10月 13日 星期五 12:31:11   ---biaoge