在很多公司的笔试题中都会涉及到一些排序的题目, 一下提供了一些排序方法的实现供参考:
迭代方法实现选择排序:
def selection_sort(ori_list): ''' selection sort best: O(n^2), worst: O(n^2), average: O(n^2), space: O(1) ''' for i in range(len(ori_list)): pos = i for j in range(i+1, len(ori_list)): if ori_list[j] < ori_list[pos]: pos = j ori_list[pos], ori_list[i] = ori_list[i], ori_list[pos] return ori_list
递归方法实现选择排序:
def selection_sort1(ori_list, i): if i == 0: return pos = i for j in range(i): if ori_list[j] > ori_list[pos]: pos = j ori_list[pos], ori_list[i] = ori_list[i], ori_list[pos] selection_sort1(ori_list, i-1)
归并排序:
def mergesort(seq): ''' 归并排序 时间复杂度:θ(nlgn) ''' mid = len(seq)//2 lft, rht = seq[:mid], seq[mid:] if len(lft) > 1: lft = mergesort(lft) if len(rht) > 1: rht = mergesort(rht) res = [] while lft and rht: if lft[-1] >= rht[-1]: res.append(lft.pop()) else: res.append(rht.pop()) res.reverse() return (lft or rht) + res
侏儒排序:
def gnomesort(seq): ''' 侏儒排序 best:Ω(n), worst: O(n^2) ''' i = 0 while i < len(seq): if i == 0 or seq[i-1] <= seq[i]: i += 1 else: seq[i-1], seq[i] = seq[i], seq[i-1] i -= 1 return seq