递归排序仅使用Array作为输入

时间:2011-10-08 16:02:54

标签: sorting language-agnostic recursion

我写了一些简短的递归程序,现在正在进行递归排序。到目前为止,我一直在使用2个输入,数组和索引。是否有一个递归的排序方法,只需要一个数组作为输入?我认为冒泡排序适用于此,但它也使用索引来跟踪位置。

如果有人想知道,我有一个HW进行递归排序(我已经使用数组和索引做了),这只是为了看看它是否可以在没有索引的情况下完成它。

1 个答案:

答案 0 :(得分:0)

我相信只需将数组作为参数即可执行递归合并排序: http://en.wikipedia.org/wiki/Merge_sort

编辑: 我想你可以跳过这样的索引:

function bubble_sort(arr)
{
    for (i=0 to arr.length-1)
    {
        if(arr[i] > arr[i+1])
        {
            swap(arr, i);
            return bubble_sort(arr);
        }
    }
    return arr;
}

这不是一个完美的冒泡,因为起始指数始终为零。复杂性仍然是O(n ^ 2)。如果您愿意克隆阵列(并浪费大量内存),那么您可以替换

return bubble_sort(arr);

使用:

return combineArrays(arr.subArray(0, i), bubble_sort(arr.subArray(i, n)));

然后,只使用数组作为参数,实现递归冒泡排序是一种有效但浪费的方法。