• 剑指offer-最小的K个数-时间效率-排序-python


    题目描述

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
    这就是排序题(将结果的最小K值输出)
     
    # -*- coding:utf-8 -*-
    #快速排序
    def quick_sort(lst):
        if not lst:
            return []
        pivot = lst[0]
        left = quick_sort([x for x in lst[1:] if x < pivot])
        right = quick_sort([x for x in lst[1:] if x >= pivot])
        return left + [pivot] + right
    #归并排序
    def merge_sort(lst):
        if len(lst) <= 1:
            return lst
        mid = len(lst) // 2
        left = merge_sort(lst[: mid])
        right = merge_sort(lst[mid:])
        return merge(left, right)
    def merge(left, right):
        l, r, res = 0, 0, []
        while l < len(left) and r < len(right):
            if left[l] <= right[r]:
                res.append(left[l])
                l += 1
            else:
                res.append(right[r])
                r += 1
        res += left[l:]
        res += right[r:]
        return res
    
    #堆排序
    def siftup(lst, temp, begin, end):
        if lst == []:
            return []
        i, j = begin, begin * 2 + 1
        while j < end:
            if j + 1 < end and lst[j + 1] > lst[j]:
                j += 1
            elif temp > lst[j]:
                break
            else:
                lst[i] = lst[j]
                i, j = j, 2 * j + 1
        lst[i] = temp
    def heap_sort(lst):
        if lst == []:
            return []
        end = len(lst)
        for i in range((end // 2) - 1, -1, -1):
            siftup(lst, lst[i], i, end)
        for i in range(end - 1, 0, -1):
            temp = lst[i]
            lst[i] = lst[0]
            siftup(lst, temp, 0, i)
        return lst
    
    #冒泡排序
    def bubble_sort(lst):
        if lst == []:
            return []
        for i in range(len(lst)):
            for j in range(1, len(lst) - i):
                if lst[j-1] > lst[j]:
                    lst[j-1], lst[j] = lst[j], lst[j-1]
        return lst
    
    #直接选择排序
    def select_sort(lst):
        if lst == []:
            return []
        for i in range(len(lst)-1):
            smallest = i
            for j in range(i, len(lst)):
                if lst[j] < lst[smallest]:
                    smallest = j
            lst[i], lst[smallest] = lst[smallest], lst[i]
    
        return lst
    #插入排序
    def Insert_sort(lst):
        if lst == []:
            return []
        for i in range(1, len(lst)):
            temp = lst[i]
            j = i
            while j > 0 and temp < lst[j - 1]:
                lst[j] = lst[j - 1]
                j -= 1
            lst[j] = temp
        return lst
    def GetLeastNumbers_Solution(tinput, k):
        # write code here
        if tinput == [] or k > len(tinput):
            return []
        # tinput.sort()
        tinput = quick_sort(tinput)
        return tinput[: k]
    
    tinput,k =[4,5,1,6,2,7,3,8],4
    
    print GetLeastNumbers_Solution(tinput, k)
  • 相关阅读:
    超级女声杭州赛区7进5
    究竟怎么了?
    最近发现
    S2SH基于角色权限拦截
    基于S2SH的电子商务网站系统性能优化
    TSQL复习笔记(一)
    用户sa登录失败,该用户与可信sql server连接无关联
    SQL附加数据库报5120的错误的解决办法
    DotNet中配置文件的使用(一)
    JQuery中使用AJAX $.ajax(prop)方法详解
  • 原文地址:https://www.cnblogs.com/ansang/p/12047767.html
Copyright © 2020-2023  润新知