码迷,mamicode.com
首页 > 编程语言 > 详细

python实现常用排序算法

时间:2017-03-08 19:10:10      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:行合并   插入排序   bsp   select   计算   冒泡   insert   最大的   code   

排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升。

1.插入排序

插入排序默认当前被插入的序列是有序的,新元素插入到应该插入的位置,使得新序列仍然有序。

def insertion_sort(old_list,new_list=[]):
    last=old_list.pop()
    new_list.append(last)
    while old_list !=[]:
        last=old_list.pop()
        for i,value in enumerate(new_list):
            if last<new_list[0]:
                new_list.insert(0,last)
            elif last>new_list[-1]:
                new_list.append(last)
            elif last>new_list[i-1] and last<new_list[i]:
                new_list.insert(i,last)
    return new_list

2.冒泡排序

冒泡排序的原理是对序列进行遍历,遍历过程中如果发现相邻两个元素,左边的元素大于右边,则进行交换,一次遍历之后最大的元素被移动到对尾,然后进行第二次遍历,直到队列有序。

def bubble_sort(old_list):
    n=len(old_list)
    for i in range(n-1):
        for j in range(n-1-i):
            if old_list[j]>old_list[j+1]:
                temp=old_list[j+1]
                old_list[j+1]=old_list[j]
                old_list[j]=temp
    return old_list

3.快速排序

快速排序的实现方法是设置两个游标,一个从前往后,一个从后往前,如果左侧游标所指数据大于右侧,两数据进行交换,直到两个游标指向同一数据,则第一趟遍历结束。结束时游标所在数据,左侧都比其小,右侧都比其大。

接下来对游标前后的两个序列进行递归操作。

def quick_sort(L,low,high):
    i = low
    j = high
    if i >= j:
        return L
    key = L[i]
    while i < j:
        while i < j and L[j] >= key:
            j = j-1
        L[i] = L[j]
        while i < j and L[i] <= key:
            i = i+1
        L[j] = L[i]
    L[i] = key
    quick_sort(L, low, i-1)
    quick_sort(L, j+1, high)
    return L

4.选择排序

选择排序的原理是是先找到起始数组中最小的元素,将它交换到i=0;然后寻找剩下元素中最小的元素,将它交换到i=1的位置…… 直到找到第二大的元素,将它交换到n-2的位置。这时,整个数组的排序完成。

def selection_sort(old_list):
    for i in range(0,len(old_list)-1):
        index=i
        for j in range(i+1,len(old_list)):
            if old_list[index]>old_list[j]:
                index=j
        old_list[i], old_list[index] = old_list[index], old_list[i]
    return old_list

5.归并排序

归并排序是对数组进行拆分再拆分,直到不能再拆分,然后分别对最小粒度的子数组进行合并,然后再合并稍微大一点的数组,直到最终合成一个最大的数组。分两个函数完成,一个负责拆分,一个负责排序合并。

def merge_sort(lists):
    if len(lists) <= 1:
        return lists
    num = len(lists) / 2
    left = merge_sort(lists[:num])
    right = merge_sort(lists[num:])
    return merge(left, right)

def merge(left, right):
    i, j = 0, 0
    result = []
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result += left[i:]
    result += right[j:]
    return result

 

python实现常用排序算法

标签:行合并   插入排序   bsp   select   计算   冒泡   insert   最大的   code   

原文地址:http://www.cnblogs.com/wangbin2188/p/6520560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!