使用指针而不是索引进行归并排序
Mergsort using pointers rather than indices?
所以我需要写一个归并排序算法,其中
在排序过程中,应该使用指针而不是数组索引来访问数组元素,因此该方法取2个
int
指针,high
和low
,并从那里开始工作。
问题:
是否可以对数组进行排序而不索引它,或者参数应该是指针而不是值?
注:非常不熟悉指针操作,谢谢你的帮助!
由于数组是一个连续的内存块,因此可以像使用索引一样使用指针来访问数组成员:
int array[] = {1, 2, 3, 4, 5};
int *pointer = array;
int x = *(pointer + 1);
// x = 2
编译器根据数据大小自动计算偏移量:sizeof(int)
.
对于你的项目,如果给你一个指针指向数组的第一个和最后一个元素,你可以在中间分割数组:
int *middle = firstPointer + ((lastPointer - firstPointer) / 2);
然后你可以继续递归地做
合并排序对两次运行(数组的一部分)中的每次输入和一次运行(输出数组的一部分)的输出使用顺序访问。您可以使用前进1的本地指针,而不是从基指针索引。所以主合并过程看起来像这样:
int * plft = left; // ptr to left run
int * prgt = right; // ptr to right run
int * pdst = destination; // ptr to output
// loop with checks for reaching end of either left or right run
if(*plft <= *prgt) // at some point in the merge function
*pdst++ = *plft++;
else
*pdst++ = *prgt++;
问题没有提到目标是实现自顶向下(使用递归将指针填充堆栈,直到运行大小== 1,然后开始合并并返回)还是自底向上的合并排序(跳过递归步骤,初始化运行大小为1,合并数组中的运行对直到所有对合并,然后运行大小*= 2,重复直到运行大小>=数组大小)。
wiki文章展示了自顶向下和自底向上归并排序的简单示例。
http://en.wikipedia.org/wiki/Merge_sort相关文章:
- 如何解决索引和排序问题
- 使用C++中的排序对索引进行排序
- 如何不对数组的元素进行排序,而是对数组的索引进行排序?
- 在 c++ 中对矩阵乘法的索引重新排序
- c++中的数组和归并排序
- 字符串归并排序
- 归并函数中动态数组的归并排序
- 递归归并排序传递指向零的指针
- Vector of struct (copy_n和归并排序)
- 归并排序混淆的类型
- 递归归并排序函数输出不好
- 归并排序算法不能正常工作
- 何时使用归并排序,何时使用快速排序
- 使用指针而不是索引进行归并排序
- 两个嵌套循环的非递归归并排序
- 归并排序c++实现脱界索引访问
- c++:从头开始实现归并排序
- 为什么GNU并行快速排序比归并排序慢?
- 使用归并排序计算反转的次数
- 并行归并排序中的性能问题