冒泡排序、插入排序、合并排序以及快速排序

主要说明冒泡排序、插入排序、合并排序以及快速排序原理,附上python实现代码以及原理样例图

1、冒泡排序

冒泡排序逻辑
"""
冒泡排序
"""
def bubble_sort(array):

    startT = time.time()

    n = len(array)

    for i in range(n):

        already_sorted = True

        for j in range(n-i-1):
            if array[j] > array[j+1]:
                array[j],array[j+1] = array[j+1],array[j]

                already_sorted = False


        if already_sorted:
            break;

    print("冒泡排序耗时:%s" % str(time.time() - startT))

    return array

2、插入排序

插入排序逻辑
"""
插入排序算法
"""
def insertion_sort(array):

    for i in range(1,len(array)):

        key_item = array[i]

        j = i-1;

        while j>=0 and array[j] > key_item:
            array[j+1] = array[j]
            j -= 1

        array[j+1] = key_item
    return array

3、合并排序

合并排序逻辑
"""
合并排序
"""
#合并数组
def merge(left,right):
    #如果有一个数组为空,不需要合并
    if len(left) == 0:
        return right

    if len(right) == 0:
        return left

    result = []
    index_left = index_right = 0

    #查看两个数组,直到所有元素都装进结果数组中
    while len(result) < len(left)+len(right):

        #决定从哪个数组中取数据放入result
        if left[index_left] <= right[index_right]:
            result.append(left[index_left])
            index_left+=1
        else:
            result.append(right[index_right])
            index_right+=1

        if index_left == len(left):
            result+=right[index_right:]
            break

        if index_right == len(right):
            result+=left[index_left:]
            break

    return result

#递归拆分数组
def merge_sort(array):

    if len(array) < 2:
        return array

    midpoint = len(array) // 2

    return merge(left=merge_sort(array[:midpoint]),
                 right=merge_sort(array[midpoint:]))

4、快速排序


快速排序逻辑
"""
快排
"""
def quick_sort(array):

    if len(array)<2:
        return array

    low,same,high = [],[],[]

    #随机选择pivot元素
    pivot = array[randint(0,len(array)-1)]

    for item in array:
        if item < pivot:
            low.append(item)
        elif item == pivot:
            same.append(item)
        elif item > pivot:
            high.append(item)

    return quick_sort(low)+same+quick_sort(high)

你可能感兴趣的:(冒泡排序、插入排序、合并排序以及快速排序)