Python排序算法

Python排序算法

Posted by 王正午 on July 6, 2020

快速排序

快排,取一个数字作为参照,比他大的放右边,小的放左边,递归(思想 分而治之),

直到最后序列 < 2



def quick_sort(num_list):
    if len(num_list) < 2:
        return num_list
    else:
        base = num_list[0]
        left = [left_num for left_num in num_list[1:] if left_num <= base]
        right = [right_num for right_num in num_list[1:] if right_num > base]
        return quick_sort(left) + [base] + quick_sort(right)
        

冒泡排序

冒泡就是一趟一趟交换位置


def mao_pao_sort(num_list):
    for num in range(len(num_list)):
        for j in range(1, len(num_list) - num):
            if num_list[j - 1] > num_list[j]:
                # 换位置
                num_list[j], num_list[j - 1] = num_list[j - 1], num_list[j]
    return num_list

选择排序

选择排序 先找到最小(大)的数字放在起始位置,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾


class ChoiceSoft:
    def __init__(self, num_list):
        self.num_list = num_list

    def small_index(self):
        total_num = len(self.num_list)
        small_num = self.num_list[0]
        small_index = 0  # 最小数的索引
        for num in range(1, total_num):
            if small_num > self.num_list[num]:
                small_num = self.num_list[num]
                small_index = num
        # 返回索引
        return small_index

    def soft(self):
        new_arr = []
        # for i in range(1, len(self.num_list)):
        while self.num_list:
            small = self.small_index()
            new_arr.append(self.num_list.pop(small))
        return new_arr

插入排序

步骤

1 从第一个元素开始,该元素可以认为已经被排序
2 取出下一个元素,在已经排序的元素序列中从后向前扫描
3 如果该元素(已排序)大于新元素,将该元素移到下一位置
4 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5 将新元素插入到该位置后
6 重复步骤2~5

 插入算法把要排序的数组分成两部分:
 第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),
 而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
    
def first_insert_soft(num_list):
    for num in range(1, len(num_list)):
        key = num_list[num]
        j = num
        while j >= 0:
            if num_list[j] > key:
                num_list[j + 1] = num_list[j]
                num_list[j] = key
            j -= 1
    return num_list


def second_insert_sort(num_list):
    for k in range(1, len(num_list)):
        cur = num_list[k]
        j = k
        while j > 0 and num_list[j - 1] > cur:
            num_list[j] = num_list[j - 1]
            j -= 1
        num_list[j] = cur
    return num_list
    
欢迎大家提供更多的有关排序算法得意见