【问题标题】:C++ Using pointers for selection sort functionC ++使用指针进行选择排序功能
【发布时间】:2013-10-30 23:23:04
【问题描述】:

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

来电:

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

}

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

感谢任何帮助。干杯。

【问题讨论】:

  • 您正在比较指针所持有的地址。如果你想要它指向的值,你需要推迟它,例如。 *min = *j。您还想要i &lt; last,因为last 是通过最后一个元素的一个位置——通常的约定后跟stl。

标签: c++ pointers


【解决方案1】:

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

在你的代码中'int* min = i;'将 min 设置为与“i”相同的地址(引用)。所以稍后在你的'if'语句'if(j

【讨论】:

    【解决方案2】:

    在指针中,如果,

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

    现在,在您的selectionSort 函数if 条件中,您正在比较实际内存地址而不是值。 See example here.

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 实现排序算法是学习编程难点的好方法。
      • @DominicMcDonnel,我的回复中是否有任何部分表明实现排序算法不是学习编程难点的好方法?你错过了重点,你没有阅读我的回复。如果发帖人合法地寻求解决一个真正的问题,他们通常不必在那里编写自己的排序算法,因为这项工作已经完成了很多次并且可以通过 STL 提供给他们。更不用说我的回答“如果你的目标是更好地理解指针......”!!
      • 我不是反对者。你没有具体说不是,但是你没有具体说是。我认为这是一个有用的观点,所以我将其添加为评论。您也可以在不使用指针的情况下进行排序,因此它也不一定属于您答案的那一部分。
      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多