求数组前1~k个最小元素

class Solution(object):
    
    def quickSort(self, arr, startIndex, endIndex):
        i = startIndex
        j = i
        while j <= endIndex - 1:
            if arr[j] < arr[endIndex]:
                temp = arr[j]
                arr[j] = arr[i]
                arr[i] = temp
                i += 1
            j += 1
        temp = arr[endIndex]
        arr[endIndex] = arr[i]
        arr[i] = temp
        return i
    
    
    def smallestK(self, arr, k, startIndex, endIndex):
        if startIndex >= endIndex:
            return
        index = self.quickSort(arr, startIndex, endIndex)
        if index == k + 1:
            return
        if index < k + 1:
            self.smallestK(arr, k, index + 1, endIndex)
        else:
            self.smallestK(arr, k, startIndex, index - 1)
        

test = Solution()
example_nums = int(input())
res = []
for i in range(example_nums):
    length = int(input())
    arr = input().split(' ')
    arr = [int(i) for i in arr]
    src = []
    for i in arr:
        if i not in src:
            src.append(i)
    startIndex = 0
    endIndex = len(src) - 1
    k = int(input())
    test.smallestK(src, k, startIndex, endIndex)
    for i in range(k):
       res.append(src[i])
    res.sort()
    for i in res:
        print(i, end=' ')
    res.clear()
    print()
    
    
    
# 2
# 19
# 56 34 22 7 16 95 46 37 81 12 73 26 19 31 68 42 3 72 51
# 8
# 26
# 8 33 28 17 51 57 49 35 11 25 37 14 3 2 13 52 12 6 2 32 54 5 16 22 23 7
# 13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值