我试图写一个递归选择排序,我真的很困惑,而且很难追踪为什么这不起作用。如果有人能告诉我问题出在哪里,那就太好了!
这是我的代码
def selectionSortRecursive(lis, minIndex = 0):
if minIndex - 1 == len(lis):
return lis
minValueIndex = minIndex #Assigns the very first item in the list as the minimum value index
for i in range (minIndex + 1, len(lis)):
if lis[i] < lis[minValueIndex]: #if any item is less than min value, its index gets assigned the minimum value
minValueIndex = i
lis[minIndex], lis[minValueIndex] = lis[minValueIndex], lis[minIndex] #After you go through the list, you switch the smallest item into the minimum index, which starts off being 0
lis = selectionSortRecursive(lis, minIndex+1) #now we're gonna sort the list at the next min
return lis
答案 0 :(得分:0)
请尝试此修改:
def selectionSortRecursive(lis, minIndex = 0):
if minIndex - 1 == len(lis):
return lis
minValueIndex = minIndex #Assigns the very first item in the list as the minimum value index
for i in range (minIndex + 1, len(lis)):
if lis[i] < lis[minValueIndex]: #if any item is less than min value, its index gets assigned the minimum value
lis[minValueIndex], lis[i] = lis[i], lis[minValueIndex] #After you go through the list, you switch the smallest item into the minimum index, which starts off being 0
lis = selectionSortRecursive(lis, minIndex+1) #now we're gonna sort the list at the next min
return lis
答案 1 :(得分:0)
试试这个。
static int maxIndex;
public static void selectionSort(Object[] source, int fromIndex, int endIndex){
if(endIndex==fromIndex){
return;
}
else{
if(((Comparable) source[fromIndex]).compareTo(source [maxIndex])>0){
maxIndex=fromIndex;
}
bubbleSort(source,fromIndex+1,endIndex);
}
Object temp=source[fromIndex];
source[fromIndex]=source[maxIndex];
source[maxIndex]=temp;
bubbleSort(source,fromIndex,endIndex-1);
}