我有一个任务是通过传递指针来编写一些排序函数。不幸的是,指针只是我大脑似乎无法理解的那些概念之一。
这是电话:
int size = 10000;
int* data = new int[size];
//omitted code that populates array for the sake of space
selectionSort(data, data+size);
这是我对该功能的错误尝试:
void selectionSort(int* first, int* last) {
for (int* i = first; i < last-1; i++) {
int* min = i;
for (int* j = i+1; j < last; j++) {
if (j < min) {
min = j;
}
int* temp = i;
i = min;
min = temp;
}
}
}
基本上,当我将一个指针与另一个指针进行比较或调整指针时,我无法弄清楚会发生什么。是调整/比较它指向的值还是比较实际的指针本身?
感谢任何帮助。干杯。
答案 0 :(得分:4)
指针有时是一个难以理解的概念。也许将有助于将它们视为对值的引用,而不是值本身(它是邮箱的地址,而不是邮箱的内容)。
在你的代码中'int * min = i;'将min设置为与'i'相同的地址(引用)。所以稍后在你的'if'语句'if(j
答案 1 :(得分:0)
指点if,
int* i; //i holds actual physical memory address & i* holds value at that address.
现在,在selectionSort
函数if
条件下,您正在比较实际内存地址而不是值。 See example here.
答案 2 :(得分:-1)
您永远不应该真正处于需要创建自己的排序算法的位置。相反,你应该总是尝试利用现有的集合类,例如set,它将为你排序。话虽这么说,如果你的目标是更好地理解指针,那么正如大狼评论的那样,你不应该对指针进行排序,而是他们指向的是什么!在你的情况下整数。