在数组 c++ 上调用排序函数

Posted

技术标签:

【中文标题】在数组 c++ 上调用排序函数【英文标题】:Calling a sort function on an array c++ 【发布时间】:2015-05-05 00:01:29 【问题描述】:

我正在使用插入排序函数对 5000 int 升序数组进行排序。当我将数组的地址传递给函数调用时,我得到 [错误] 名称查找的“我”更改为 ISO 'for' 范围 [-fpermissive]。也许我应该使用向量,但我不熟悉它们。也许我编码错了?

#include <iostream>
#define SIZE 5000 //array size
using namespace std;

void insertionSort(int arr[], int length) 
      int i, j, tmp;
      for (i = 1; i < length; i++) 
            j = i;
            while (j > 0 && arr[j - 1] > arr[j]) 
                  tmp = arr[j];
                  arr[j] = arr[j - 1];
                  arr[j - 1] = tmp;
                  j--;
            
      


int main() 
    int a[SIZE];
    int count = 1;

    for(int i=0; i<SIZE; i++) 
        a[i] = count;
        count++;
    

    for(int i = 0; i < SIZE; i++) 
        printf("%d\t", a[i]);
    

    insertionSort(&a[i], SIZE);

【问题讨论】:

在您的 main() 函数中 i 在您调用 insertionSort(&amp;a[i], SIZE); 时未定义。这是因为 i 仅存在于您的 for 循环内...请参阅下面的 @michael-schmitt 答案。 【参考方案1】:

你可能想打电话

 insertionSort(a, SIZE)

【讨论】:

哇。谢谢你。我以为你只能通过引用传递数组参数。我不只是想要一个修复,你能解释一下为什么我不必传递地址而不仅仅是数组吗?并且,再次感谢您的建议。 数组标识符指向数组的开头,所以它本质上已经是地址了。【参考方案2】:

// insertionSort(&amp;a[i], SIZE); 这里你没有在函数main() 中声明i,只在你的for循环中。并且对insertionSort的调用在你的循环之外。

传递(&amp;a)[0]a 是同一个意思。

【讨论】:

感谢大家的宝贵时间。 '传递(&amp;a)[0]a 是同一个意思。'——这是错误的。应该是:'传递 &amp;(a[0])a 意味着同样的事情。'

以上是关于在数组 c++ 上调用排序函数的主要内容,如果未能解决你的问题,请参考以下文章

1使用PHP的排序函数对以下中的数组排序。 2.在表单上由用户输入学号,姓名和成绩这三列的数据,一共5行。

c++ sort 函数能对类或者结构体进行排序吗

使用选择算法编译时间递归排序

c++排序二维数组编译失败

用于对字符串进行排序的 C++ sort() 函数

Javascript排序数组 - 在比较函数中调用函数