在c++中快速排序数组而不修改它(可能不使用临时数组)
QuickSort an array without modifying it (may not use a temporary array) in C++
通常我不会问我的学校作业关于stackoverflow,但我认为他们想从我们这里得到什么是不可能的,除非使用临时数组或修改数组。
他们想从我们这里得到的是:
-
快速排序函数,应该是递归的
-
它应该排序(这是排序算法所做的),但它应该保持数组完整,
-
不能使用临时数组
-
,它必须以链表格式返回排序列表。
-
功能应该是这样的:
LinkedList *quickSort(int *array, int startPosition, int endPosition)
作为链表返回很容易,排序很容易,但在算法的每一步都没有修改?我不这么认为。
我不是说请把解决方案发给我。我只想让你回答这个问题,这不是不可能吗?
编辑:"保持数组完整"老师的意思是"不改变数组的大小,但你可以修改数组的顺序",所以问题解决了
我将检查其中一个答案,以使标签问题解决。
直接回答您的问题:可以就地进行快速排序(不需要任何临时存储区域)
因为我不想直接帮你完成作业:)这里有一个资源可以让你开始。
第二种算法见http://rosettacode.org/wiki/Sorting_algorithms/Quicksort
根据我对问题的理解,quickSort
可以定义为
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;
}
其中QuickSort
具有定义
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);
}
伙计们,我以为我错过了一些东西,有一种我不知道的方式,在你的评论之后,我打电话给助理,他说当然你需要修改数组,你不可能不修改它。但是在练习声明中,它明确地说
b)使用快速排序算法对数组子数组中给定位置之间的数字进行排序和保持数组完整(不能使用临时数组)
再次感谢所有的回答和评论。抱歉大家误会了。相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '