在数组 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(&a[i], SIZE);
时未定义。这是因为 i
仅存在于您的 for
循环内...请参阅下面的 @michael-schmitt 答案。
【参考方案1】:
你可能想打电话
insertionSort(a, SIZE)
【讨论】:
哇。谢谢你。我以为你只能通过引用传递数组参数。我不只是想要一个修复,你能解释一下为什么我不必传递地址而不仅仅是数组吗?并且,再次感谢您的建议。 数组标识符指向数组的开头,所以它本质上已经是地址了。【参考方案2】:// insertionSort(&a[i], SIZE);
这里你没有在函数main()
中声明i
,只在你的for循环中。并且对insertionSort
的调用在你的循环之外。
传递(&a)[0]
和a
是同一个意思。
【讨论】:
感谢大家的宝贵时间。 '传递(&a)[0]
和a
是同一个意思。'——这是错误的。应该是:'传递 &(a[0])
和 a
意味着同样的事情。'以上是关于在数组 c++ 上调用排序函数的主要内容,如果未能解决你的问题,请参考以下文章