在python中,有没有算法可以找到未排序数组中k个最小数的索引?我知道如何使用numpy模块来实现这一点,但我不想找那个。我马上想到的一个方向是排序算法。假设我有一个算法,可以在python中使用bubble sort对数组进行排序:def bubbleSort(arr):
n = len(arr)
# Traverse through all array elements
for i in range(n):
for j in range(0, n-i-1):
# Swap if the element found is greater
# than the next element
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
我不知道如何将此算法修改为只返回数组中k个最小数的索引。任何使用排序算法或选择算法(如quickselect,quicksort)的帮助,将不胜感激。在
编辑1:所以说数组是:
^{pr2}$
然后它必须返回一个数组:
index_of_least_k = [2,8,1]
对于k=3。在
如果我必须修改排序算法,比如bubble sort,我知道如何更改,以便这次它交换索引,比如:def modified_bubbleSort(arr, index):
n = len(arr)
# Traverse through all array elements
for i in range(n):
for j in range(0, n-i-1):
# Swap if the element found is greater
# than the next element
if arr[j] > arr[j+1] :
index[j], index[j+1] = index[j+1], index[j]
return index
array = [12, 11, 0, 35, 16, 17, 23, 21, 5]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8]
indexOfAllsorted = modified_bubblesort(array, index)
在这种情况下,它返回我:indexOfAllsorted = [2,8,1,0,4,5,7,6]
我不希望这样,因为有额外的5个值,为了避免我的算法应该具有的内存开销:index_of_least_k = [0, 0, 0]
在内存中为k=3,然后在继续时填充它。我希望我说得很清楚。在
EDIT2:我不想在python中寻找任何库或模块来实现这一点。在