bucket排序的实现中出错

error in implementation of bucket sort

本文关键字:出错 实现 排序 bucket      更新时间:2023-10-16

这是我的代码,无法理解错误在哪里

#include <iostream>
#include<iomanip>
using namespace std;
#define narray 8;// array size;
#define  nbucket 5;// bucket size;
#define interval 10;// bucket range
struct node
{
int data;
struct node *next;
};
void BucketSort(int arr[]);
struct node *InsertionSort(struct Node *list);
void print(int arr[]);
void printBuckets(struct Node *list);
int getBucketIndex(int value);
void BucketSort(int arr[])
{
 int i,j;
 struct node **buckets;
 buckets = (struct node **)malloc(sizeof(struct node*) * nbucket); 
 for (i=0;i<nbucket;i++){
      buckets[i]=NULL;
 }
 for (int i=0;i<narray;i++){
  struct node *current;
  int pos=getBucketIndex(arr[i]);
  current=(struct node *)malloc(sizeof(struct node));
  current->data=arr[i];
  current->next=buckets[pos];
  buckets[pos]=current;

 }
}

int main(){


 return 0;
}

错误很多,例如

Error   1   error C2143: syntax error : missing ')' before ';'  c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  22  bucket_sort
Error   2   error C2059: syntax error : ')' c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  22  bucket_sort
Error   3   error C2146: syntax error : missing ')' before identifier 'i'   c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  23  bucket_sort
Error   4   error C2059: syntax error : ';' c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  23  bucket_sort
Error   5   error C2059: syntax error : ')' c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  23  bucket_sort
Error   6   error C2143: syntax error : missing ';' before '{'  c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  23  bucket_sort
Error   7   error C2146: syntax error : missing ')' before identifier 'i'   c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  26  bucket_sort
Error   8   error C2059: syntax error : ';' c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  26  bucket_sort
Error   9   error C2059: syntax error : ')' c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  26  bucket_sort
Error   10  error C2143: syntax error : missing ';' before '{'  c:documents and settingsstudentmy documentsvisual studio 2008projectsbucket_sortbucket_sortbucket_sort.cpp  26  bucket_sort

#define nbucket 5;和其他定义中删除;

此时,第22行被预处理器扩展为明显无效的:

buckets = (struct node **)malloc(sizeof(struct node*) * 5;);
//                                                      ^^

#define行不是编译器的部分,而是在编译器之前运行的预处理器的一部分。预处理器处理的行不应以分号结尾。

以这行为例:

#define narray 8;// array size;

这将创建一个名为narray。当预处理器运行时,它用替换文本替换narray的所有实例,在本例中为8;。正如您所看到的,在表达式中包含8;将在不应该有分号的地方添加分号。