我试图用指针对数组进行排序

时间:2015-09-27 10:05:41

标签: c++ arrays sorting pointers

我正在尝试使用指针对数组进行排序。这就是我到目前为止所拥有的。这几乎就是教科书中的例子,尽管文中的例子不包括

  

std :: copy(net,net + SIZE,net2);

void pointer(void) {
  int j,i;
  std::copy(net, net+SIZE, net2);
  //int *p[SIZE];
  float temp;
  int sortedflag=0;
  //for (i=0;i<SIZE;i++) net2[i]=net+i;
  for(i=0;i<SIZE;i++)cout<<*net2[i]<<"";
    while (!sortedflag){
        sortedflag=1;
        for(j=0;j<SIZE-1;j++){
            if(*net2[j]>*net2[j+i]){
                temp=net2[j];
                net2[j]=net2[j+1];
                net2[j+1]=temp;
                sortedflag=0;
            }
        }
    }

完整代码

http://pastebin.com/rYYp3vrR

我一直得到的错误是

  

无法将float转换为* float

我明白为什么会这样,但我完全迷失了解决方案。过去一周我一直在网上寻找解决方案。

如果你能解释指针的实际用途,也可以获得奖励积分。这几乎肯定是经验不足,但似乎指针使程序变得不必要地复杂且不太安全。

2 个答案:

答案 0 :(得分:1)

float temp应该阅读float *temp - 您需要临时存储指针,而不是float

你是对的,在这个例子中使用指针没什么意义。假设您正在尝试对非常大的对象进行排序;对那些物品进行洗牌会花费更多的时间,而不是将指针拖到它们上面。

指针有很多用途(理想情况下是智能类型 - shared_ptrunique_ptr等)。人们常说,只是部分地开玩笑说,计算机科学中没有任何问题无法通过另一个间接层次来解决,而指针是实现这种间接的一种方式。

答案 1 :(得分:0)

详细说明Alan关于改组的评论,例如采用像Merge Sort这样的排序算法。

通常,合并排序使用您要排序的数组副本来帮助合并过程。但是有指针,例如链接列表实现,您可以合并排序所有数据,而无需将其带入程序(进程)使用的内存中。

或者,例如在计算机上移动文件。您的文件系统(很可能)只更改指向硬盘上该文件的指针,它不会实际移动它。

(我知道这不是一个直接的编程示例,但希望它能更清晰地指出整个指针的概念,因为它是理解编程的巨大的方面。)

我没有必要的评论要点,所以我希望你能原谅这篇帖子作为答案。