2

我的任务是通过传递指针来编写一些排序函数。不幸的是,指针只是我的大脑似乎无法理解的那些概念之一。

这是电话:

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; 
    }
}

}

基本上,当我将一个指针与另一个指针进行比较或调整指针时,我无法弄清楚会发生什么。它是在调整/比较它所指向的值还是在比较实际的指针本身?

任何帮助表示赞赏。干杯。

4

3 回答 3

4

指针有时是一个难以理解的概念。也许将它们视为对值的引用而不是值本身会有所帮助(它是邮箱的地址,而不是邮箱的内容)。

在你的代码中'int * min = i;' 将 min 设置为与“i”相同的地址(引用)。所以稍后在你的'if'语句'if(j < min)'中你正在比较引用,而不是值。您需要“取消引用”您的指针以获取值,如下所示:'if (*j < *min)'。

于 2013-10-25T01:57:06.433 回答
0

在指针中,如果,

int* i; //i holds actual physical memory address & i* holds value at that address.

现在,在您的selectionSort函数if条件下,您正在比较实际的内存地址而不是值。请参见此处的示例。

于 2013-10-25T02:08:25.927 回答
-1

您永远不应该真正处于需要创建自己的排序算法的位置。相反,您应该始终尝试利用现有的集合类,例如 set,它将为您排序。话虽这么说,如果您的目标是更好地理解指针,那么正如 Greatwolf 评论的那样,您不应该对指针进行排序,而是对它们指向的内容进行排序!在你的情况下整数。

于 2013-10-25T02:00:07.763 回答