python 实现8大排序算法

来源:互联网 发布:mysql主从原理 编辑:程序博客网 时间:2024/06/13 23:11

python 实现8大排序算法

  • python 实现8大排序算法
      • 插入排序
      • 冒泡排序
      • 选择排序
      • 希尔排序
      • 快速排序
      • 归并排序
      • 堆排序
      • 基数排序

1.插入排序

  • 实现一
def insert(lists):    count = len(lists)    for i in range(1, count):        key = lists[i]        j = i        while j > 0 and lists[j - 1] > key:            lists[j] = lists[j - 1]            j -= 1        lists[j] = key
  • 实现二
def insert2(lists):    count = len(lists)    for i in range(1, count):        key = lists[i]        for j in range(i - 1, -1, -1):            if key < lists[j]:                lists[j + 1] = lists[j]                lists[j] = key

2.冒泡排序

def bubble(lists):    count = len(lists)    for i in range(0, count - 1):        for j in range(0, count - i - 1):            if lists[j] > lists[j + 1]:                temp = lists[j]                lists[j] = lists[j + 1]                lists[j + 1] = temp
def bubble2(lists):    count = len(lists)    for i in range(0, count - 1):        for j in range(0, count - i - 1):            if lists[j] > lists[j + 1]:                lists[j], lists[j + 1] = lists[j + 1], lists[j]

3.选择排序

def select(lists):    count = len(lists)    for i in range(0, count):        min = i        for j in range(i + 1, count):            if lists[j] < lists[min]:                min = j        lists[i], lists[min] = lists[min], lists[i]

4.希尔排序

def shell(lists):    count = len(lists)    step = count // 2    while step > 0:        for i in range(step, count):            key = lists[i]            j = i            while j >= step and lists[j - step] > key:                lists[j] = lists[j - step]                j -= step            lists[j] = key        step //= 2

5.快速排序

def quick(lists, l, r):    if l >= r:        return    i = l    j = r    key = lists[i]    while i < j:        while j > i and lists[j] >= key:            j -= 1        lists[i] = lists[j]        while i < j and lists[i] <= key:            i += 1        lists[j] = lists[i]    lists[i] = key    quick(lists, l, i - 1)    quick(lists, j + 1, r)

6.归并排序

def merge(lists, l, m, r, temp):    i = l    j = m + 1    t = 0    while i <= m and j <= r:        if lists[i] < lists[j]:            temp[t] = lists[i]            t += 1            i += 1        else:            temp[t] = lists[j]            t += 1            j += 1    while i <= m:        temp[t] = lists[i]        i += 1        t += 1    while j <= r:        temp[t] = lists[j]        j += 1        t += 1    t = 0    while l <= r:        lists[l] = temp[t]        l += 1        t += 1def merge_sort(lists, l, r, temp):    if l < r:        m = (l + r) // 2        merge_sort(lists, l, m, temp)        merge_sort(lists, m + 1, r, temp)        merge(lists, l, m, r, temp)

7.堆排序

def heap_adjust(lists, i, l):    key = lists[i]    j = 2 * i + 1    while j <= l:        if j + 1 <= l and lists[j] < lists[j + 1]:            j += 1        if lists[j] > key:            lists[i] = lists[j]            i = j        else:            break        j = 2*j + 1    lists[i] = keydef heap_sort(lists):    count = len(lists)    i = count // 2 - 1    while i >= 0:        heap_adjust(lists, i, count)        i -= 1    for j in range(count - 1, 0, -1):        lists[0], lists[j] = lists[j], lists[0]        heap_adjust(lists, 0, j - 1)

8.基数排序

参考