在C++中快速修改数组(不使用临时数组)

在C++中快速修改数组(不使用临时数组),c++,arrays,recursion,linked-list,quicksort,C++,Arrays,Recursion,Linked List,Quicksort,通常我不会要求我的学校练习stackoverflow,但我认为如果不使用临时数组或修改数组,他们想从我们这里得到什么是不可能的 他们想从我们这里得到的是: 应该是递归的快速排序函数 它应该排序这就是排序算法所做的lol,但它应该保持数组不变 不能使用临时数组 它必须以linkedlist格式返回排序后的列表 函数应如下所示: LinkedList*quickSortint*数组,整数起始位置,整数结束位置 作为linkedlist返回很容易,排序很容易,但在算法的每一步都不需要修改?我不这么认为

通常我不会要求我的学校练习stackoverflow,但我认为如果不使用临时数组或修改数组,他们想从我们这里得到什么是不可能的

他们想从我们这里得到的是:

应该是递归的快速排序函数

它应该排序这就是排序算法所做的lol,但它应该保持数组不变

不能使用临时数组

它必须以linkedlist格式返回排序后的列表

函数应如下所示:

LinkedList*quickSortint*数组,整数起始位置,整数结束位置

作为linkedlist返回很容易,排序很容易,但在算法的每一步都不需要修改?我不这么认为

我不是说请把解决方案寄给我。我只想让你回答这个问题,这不是不可能吗

编辑:保持数组不变意味着不改变数组的大小,但可以修改数组的顺序,所以问题就解决了


我将检查其中一个答案,以使标记问题得到解决。

直接回答您的问题:可以在没有任何临时存储区域的情况下就地进行快速排序

因为我不想直接帮你完成家庭作业:这里有一个资源可以帮助你


根据我对问题的理解,快速排序可以定义为

std::list<int> quickSort(int * array, int startPosition, int endPosition) {
    std::list<int> result;
    for (int i = startPosition; i <= endPosition; ++i)
        result.push_back(array[i]);
    QuiskSort(result.begin(), result.end());
    return result;
}

伙计们,我觉得我遗漏了一些东西,有一种方法我不知道,在你的评论之后,我打电话给助手,他说当然你需要修改数组,如果不修改它,你将无法完成。但在演习声明中明确表示

b使用快速排序算法在给定位置之间对数组子数组中的数字进行排序 保留阵列不变可能不会使用临时阵列


再次感谢所有的回答和评论。对不起,这些人理解错误。

也许临时数组指的是将返回的数组之外的数组?我同意这个措辞似乎有些奇怪。我想请你澄清一下。难道你不能把数组复制到要创建的列表中,然后对该列表使用快速排序吗?我看不出有任何东西禁止您修改返回的列表。您可以修改并恢复初始数组吗?但是函数使用struct返回一个简单的LinkedList,而不是数组。我的作业肯定是离题的,或者太宽或其他什么。你真的应该问问你的老师。但是它会修改数组,不是吗?如果留下≤ 右键交换数组[left]和数组[right]在这里它修改了数组。我认为在一个家庭作业问题的上下文中,这可能意味着它仍然是一个静态内存块。很明显,如果你不能修改内容,或者复制到其他地方,这是不合逻辑的。我一直在考虑这个问题,我想可能是在问题措辞上有错误。我相信当他们说完好无损时,他们的意思可能是原地踏步。
template <class Iterator>
inline void QuickSort(Iterator begin, Iterator end) {
    if (end <= begin) return;
    Iterator pivot = begin, middle = begin + 1;
    for (Iterator i = begin + 1; i < end; ++i) {
        if (*i < *pivot) {
            std::iter_swap(i, middle);
            ++middle;
        }
    }
    std::iter_swap(begin, middle - 1);
    QuickSort(begin, middle - 1);
    QuickSort(middle, end);
}