递归选择排序

时间:2014-12-14 22:38:03

标签: sorting recursion selection-sort

我试图写一个递归选择排序,我真的很困惑,而且很难追踪为什么这不起作用。如果有人能告诉我问题出在哪里,那就太好了!

这是我的代码

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

2 个答案:

答案 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);
    }