python 常规排序算法

在这里插入代码片
```#! /usr/bin/env  python
# -*- coding: utf-8 -*-

'''
1、冒泡排序: 两数之间比较,如果大于后面一位,即替换位置    ok
2、选择排序: 找出数组中最小的数,与第一个元素校验,以此类推  ok
3、插入排序: 存在 arr[i] < arr[i+] ,arr[i]=arr[i+], 后移补位至 arr[i+]
4、希尔排序: 分组排序  ok
5、快速排序: ok
6、归并排序:
'''


class Ranking(object):

    # 冒泡排序:两数之间比较,如果大于后面一位,即替换位置
    def bubble_sort(self, arr: list):
        n = len(arr)
        for i in range(n):
            # flag = False
            for j in range(0, n - i - 1):
                if arr[j] > arr[j + 1]:
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
        return arr

    # 选择排序:找出数组中最小的数,与第一个元素校验,以此类推
    def choice_sort(self, arr: list):
        for i in range(len(arr) - 1):
            min_idx = i
            for j in range(i + 1, len(arr) - 1):
                if arr[min_idx] > arr[j]:
                    min_idx = j
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
            print(arr)
        return arr

    # 插入排序: 存在 arr[i] < arr[i+] ,arr[i]=arr[i+], 后移补位至 arr[i+]
    def insertion_sort(self, arr):
        for i in range(1, len(arr)):
            key = arr[i]
            j = i - 1
            while j >= 0 and key < arr[j]:
                arr[j + 1] = arr[j]
                j -= 1
            arr[j + 1] = key
            print(arr)
        return arr

    # 希尔排序
    def xier_sort(self, arr):
        grap = len(arr) // 2
        while grap > 0:
            for i in range(grap, len(arr)):
                for j in range(grap, len(arr)):
                    if arr[j - grap] > arr[j]:
                        arr[j - grap], arr[j] = arr[j], arr[j - grap]
            print(arr)
            grap = grap // 2
        return arr

    # 快速排序
    def quick_sort(self, arr):
        if len(arr) <= 1:
            return arr
        index = len(arr) // 2
        volit = arr[index]
        arr_left = [i for i in arr if i < volit]
        arr_mid = [x for x in arr if x == volit]
        arr_right = [j for j in arr if j > volit]
        list = self.quick_sort(arr_left) + self.quick_sort(arr_mid) + self.quick_sort(arr_right)
        return list

    # 归并排序
    def merge_sort(self, arr):
        if len(arr) <= 1:
            return arr
        mid = len(arr) // 2
        left_arr = arr[:mid]
        right_arr = arr[mid:]
        left_arr = self.merge_sort(left_arr)
        right_arr = self.merge_sort(right_arr)
        return self.merge(left_arr, right_arr)

    def merge(self, left_arr, right_arr):
        merged = []
        left_index = 0
        right_index = 0
        while left_index < len(left_arr) and right_index < len(arr):
            if left_arr[left_index] < right_arr[right_index]:
                merged.append(left_arr[left_index])
                left_index += 1
            else:
                merged.append(right_arr[right_index])
                right_index += 1

        while left_index < len(left_arr):
            merged.append(left_arr[left_index])
            left_index += 1
        while right_index < len(right_arr):
            merged.append(right_arr[right_index])
            right_index + 1

        return merged


if __name__ == '__main__':
    arr = [18, 80, 2, 96, 77, 43, 8, 1, 28, 79]
    ranking = Ranking()
    resule = ranking.merge_sort(arr)
    print(resule)


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值