华为机试HJ58输入n个整数,输出其中最小的k个
题目:
输出输入中最小的k个元素
想法:
通过快速排序对输入的元素进行从小到大的排序,输出前k个最小的元素
input_number = input().split(" ")
number_list = input().split(" ")
number_list = [int(n) for n in number_list]
def partition(arr, low, high):
i = low - 1
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return i + 1
def quick_sort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quick_sort(arr, low, pi-1)
quick_sort(arr, pi+1, high)
return arr
result = quick_sort(number_list, 0, len(number_list)-1)[:int(input_number[1])]
result = [str(r) for r in result]
print(" ".join(result))