常用排序算法


  • 常用排序算法
  • 一. 冒泡排序(BubbleSort)
  • 二. 选择排序(SelectionSort)
  • 三. 插入排序(Insertion Sort)
  • 待续。。。


一. 冒泡排序(BubbleSort)

  1. 基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
  2. 过程:
  • 比较相邻的两个数据,如果第二个数小,就交换位置。
  • 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
  • 继续重复上述过程,依次将第2.3…n-1个最小数排好位置。
  1. 平均时间复杂度:O(n2)

    图片引用
from random import randint


def bubble_sort(arr, order=True):
    """
    冒泡排序算法
    :param arr:需要排序的数组
    :param order:排序方向默认为True True为顺序 False为逆序
    :return: null
    """
    for num in range(len(arr)):
        for j in range(len(arr)-1, num, -1):
            if order:
                if arr[j] < arr[j - 1]:
                    arr[j], arr[j - 1] = arr[j - 1], arr[j]
            else:
                if arr[j] > arr[j - 1]:
                    arr[j], arr[j - 1] = arr[j - 1], arr[j]
    return arr


count = int(input('你需要随机多少个数进行排序?\n'))
my_arr = []

for i in range(count):
    my_arr.append(randint(0, count*10))

print('随机数列为', my_arr)

bubble_sort(my_arr)

print('排序后的数列为', my_arr)
你需要随机多少个数进行排序?
12
随机数列为 [94, 27, 0, 18, 20, 37, 96, 32, 115, 25, 52, 4]
排序后的数列为 [0, 4, 18, 20, 25, 27, 32, 37, 52, 94, 96, 115]

二. 选择排序(SelectionSort)

  1. 基本思想:
    在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;

    第二次遍历n-2个数,找到最小的数值与第二个元素交换;



    第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
  2. 过程:

    第一次找到最小的一个元素,和第一个元素交换
    第二次找到第二小的一个元素,和第二个元素交换
    第三次找到第三小的一个元素,和第三个元素进行交换

    第N-1次找到第二大的元素,和倒数第二个位置进行交换
  3. 平均时间复杂度:O(n2)
  4. python经典算法 python常见算法_插入排序

  5. 图片引用
def selection_sort(arr, order=True):
    """
    选择排序算法
    :param arr:需要排序的数组
    :param order:排序方向默认为True True为顺序 False为逆序
    :return:返回排序号了的数组
    """
    for num in range(len(arr)-1):
        index = num
        for j in range(num+1, len(arr)):
            if order:
                if arr[j] < arr[index]:
                    index = j
            else:
                if arr[j] > arr[index]:
                    index = j
        if index != num:
            arr[num], arr[index] = arr[index], arr[num]
    return arr

三. 插入排序(Insertion Sort)

  1. 基本思想:
    在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

插入排序

python经典算法 python常见算法_排序算法_02


图片引用

2. 平均时间复杂度:O(n2)

def insertion_sort(arr, order=True):
    """
    插入排序算法
    :param arr: 需要排序的数组
    :param order:排序方向默认为True True为顺序 False为逆序
    :return:
    """
    for num in range(len(arr)-1):
        for j in range(num+1, 0, -1):
            if order:
                if arr[j] < arr[j - 1]:
                    arr[j], arr[j - 1] = arr[j - 1], arr[j]
                else:
                    break
            else:
                if arr[j] > arr[j - 1]:
                    arr[j], arr[j - 1] = arr[j - 1], arr[j]
                else:
                    break
    return arr

待续。。。