C ++使用指针进行选择排序功能

时间:2013-10-25 01:42:21

标签: c++ pointers

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

这是电话:

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

}

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

感谢任何帮助。干杯。

3 个答案:

答案 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,它将为你排序。话虽这么说,如果你的目标是更好地理解指针,那么正如大狼评论的那样,你不应该对指针进行排序,而是他们指向的是什么!在你的情况下整数。