python 各类排序方法

# _*_ encoding:utf-8 *_*

class Solution:

    def insertsort(self, num_list):
        """
        插入排序
        """
        length = len(num_list)

        for i in range(1, length):
            tmp = num_list[i]
            j = i

            while j > 0 and tmp < num_list[j-1]:
                num_list[j] = num_list[j-1]
                j -= 1

            num_list[j] = tmp


    def bubblesort(self, num_list):
        """
        冒泡排序
        """
        length = len(num_list)

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


    def mergesort(self, num_list):
        """
        归并排序
        """
        if len(num_list) == 1:
            return num_list

        half = len(num_list)/2
        left = self.mergesort(num_list[:half])
        right = self.mergesort(num_list[half:])

        return self.merge(left, right)

    def merge(self, left, right):
        result = []
        l, r = 0, 0

        while l < len(left) and r < len(right):
            if left[l] < right[r]:
                result.append(left[l])
                l += 1
            else:
                result.append(right[r])
                r += 1

        result += left[l:]
        result += right[r:]
        return result


    def quicksort(self, num_list, start, end):
        # 快速排序
        if end-start < 1:
            return

        index = self.partion(num_list, start, end)

        self.quicksort(num_list, start, index-1)
        self.quicksort(num_list, index+1, end)

    def partion(self, num_list, start, end):
        import random
        index = random.randint(start, end)
        num_list[index], num_list[end] = num_list[end], num_list[index]
        small = start - 1

        for index in range(start, end):
            if num_list[index] < num_list[end]:
                small += 1
                if small != index:
                    num_list[small], num_list[index] = num_list[index], num_list[small]

        small += 1
        num_list[small], num_list[end] = num_list[end], num_list[small]

        return small
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值