python实现常用排序算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现常用排序算法相关的知识,希望对你有一定的参考价值。
排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升。
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实现常用排序算法的主要内容,如果未能解决你的问题,请参考以下文章