VS2012 C语言程序 找不到标识符是怎么回事儿?

The_Murderer 2014-03-16 03:52:39
#include<stdio.h>
#define LEN 8
int a[LEN] = { 5, 2, 4, 7, 1, 3, 2, 6 };

void QuickSort(int a[],int p,int r)
{
if(p<r)
{
int q=Partition(a,p,r);//错误 1 error C3861: “Partition”: 找不到标识符 c:\users\gcy\documents\workspaces\visual studio 2012\projects\mergesort\quicksort\quicksort.cpp 9 1 QuickSort

QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
int Partition(int a[],int p,int r)
{
int i=p,j=r+1;
int x=a[p];
while(true)
{
while(a[++i]<x&&i<r);//此处两个while是什么意思?
while(a[--j]>x);
if(i>=j)break;
Swap(a[i],a[j]);//错误 2 error C3861: “Swap”: 找不到标识符 c:\users\gcy\documents\workspaces\visual studio 2012\projects\mergesort\quicksort\quicksort.cpp 23 1 QuickSort

}
a[p]=a[j];
a[j]=x;
return j;
}
void Swap(int a,int b)
{
int temp=0;
temp=a;
a=b;
b=temp;
}
int main()
{
QuickSort(a,5,6);
for(int i=0;i<LEN;i++)
{
printf("%d,",a[i]);
}
}
...全文
1282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyf87 2014-03-16
  • 打赏
  • 举报
回复
1、把函数定义搬到前面,或者在前面加上函数声明。 2、
#include <iostream>

using namespace std;

//----------------------------------------------------------
// 快速排序 O(NlogN)

// 返回调整后基准数的位置
int partition(int data[], int low, int high)
{
	int i = low, j = high;
	int x = data[low];
	while (i < j)
	{
		// 从右向左找小于x的数来填data[i]
		while(i < j && data[j] >= x)
			j--;

		if(i < j)
		{
			data[i] = data[j]; // 将data[j]填到data[i]中,data[j]就形成了一个新的坑
			i++;
		}

		// 从左向右找大于或等于x的数来填data[j]
		while(i < j && data[i] < x)
			i++;

		if(i < j)
		{
			data[j] = data[i]; // 将data[i]填到data[j]中,data[i]就形成了一个新的坑
			j--;
		}
	}

	// 退出时,i等于j。将x填到这个坑中。
	data[i] = x;

	return i;
}

void quickSort(int data[], int low, int high)
{
	if (low < high)
	{
		int pivot = partition(data, low, high);
		quickSort(data, low, pivot - 1);
		quickSort(data, pivot + 1, high);
	}
}

int main()
{
	int array[] = {9, 6, 3, 8, 7, 1, 5, 2, 4};
	int count = sizeof(array) / sizeof(array[0]);

	quickSort(array, 0, 8);

	for(int i = 0; i < count; ++i)
		cout << array[i] << " ";

	cout << endl;

	return 0;
}
tuzhutuzhu 2014-03-16
  • 打赏
  • 举报
回复
引用 2 楼 gcy77 的回复:
引用 1 楼 tuzhutuzhu 的回复:
把swap函数定义挪到partition函数前面去
有用!swap和partition都需要移到quicksort前面,还有其他解决办法吗?提醒:这个程序的结果不对,刚运行了一下。。。
其他方法就是追加函数声明 程序运行结果不对,你需要做的是单步调试,看看到底是哪里不对
The_Murderer 2014-03-16
  • 打赏
  • 举报
回复
引用 1 楼 tuzhutuzhu 的回复:
把swap函数定义挪到partition函数前面去
有用!swap和partition都需要移到quicksort前面,还有其他解决办法吗?提醒:这个程序的结果不对,刚运行了一下。。。
tuzhutuzhu 2014-03-16
  • 打赏
  • 举报
回复
把swap函数定义挪到partition函数前面去

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧