基于python的几种排序算法的实现

#!usr/bin/python3
# -*- coding: utf-8 -*-
# @Time     : 2019/3/28 10:26
# @Author   : Yosef-夜雨声烦
# @Email    : wurz529@foxmail.com
# @File     : sort.py
# @Software : PyCharm


def bubble_sort(arr):
    '''
    冒泡排序
    :param arr:
    :return:
    '''
    count = len(arr)
    for i in range(count):
        for j in range(count - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
        print(arr)


def selection_sort(arr):
    """
    选择排序
    :param arr:
    :return:
    """
    count = len(arr)
    for i in range(0, count - 1):
        index = i
        for j in range(i + 1, count):
            if arr[index] > arr[j]:
                index = j
        arr[i], arr[index] = arr[index], arr[i]
        print(arr)


def insert_sort(arr):
    '''
    插入排序
    :param arr: 
    :return: 
    '''
    for i in range(1, len(arr)):
        j = i - 1
        key = arr[i]
        while j >= 0:
            if arr[j] > key:
                arr[j + 1] = arr[j]
                arr[j] = key
            j -= 1
    print(arr)


def quick_sort(data, start, end):
    '''
    快速排序
    :param data: 
    :param start: 
    :param end: 
    :return: 
    '''
    i = start
    j = end
    # i与j重合时,一次排序结束
    if i >= j:
        return
    # 设置最左边的数为基准值
    flag = data[start]
    while i < j:
        while i<j and data[j] >= flag:
            j -= 1
        # 找到右边第一个小于基准的数,赋值给左边i。此时左边i被记录在flag中
        data[i] = data[j]
        while i<j and data[i] <= flag:
            i += 1
        # 找到左边第一个大于基准的数,赋值给右边的j。右边的j的值和上面左边的i的值相同
        data[j] = data[i]
    # 由于循环以i结尾,循环完毕后把flag值放到i所在位置。
    data[i] = flag
    # 除去i之外两段递归
    quick_sort(data, start, i-1)
    quick_sort(data, i+1, end)


arr = [3, 6, 4, 2, 11, 10, 5]
quick_sort(arr,0,len(arr)-1)
print(arr)
原文地址:https://www.cnblogs.com/wlyhy/p/10634726.html