我试图用变量函数参数在c中创建一个函数桶排序数组,以便对每个桶进行排序,所以我试图传递bubblesort算法,但它似乎对每个桶没有任何作用,我的问题是:我做错了什么?,乍一看,我的代码中似乎没有错误:(抱歉,给您带来了麻烦)
void bubblesort (int arr[], unsigned char size) {
size /= sizeof(int);
for (unsigned char i = 0; i < size - 1; i++)
for (unsigned char j = 0; j < size - i - 1; j++)
if (arr[j] > arr[j+1])
arr[j] = arr[j] + arr[j+1],
arr[j+1] = arr[j] - arr[j+1],
arr[j] = arr[j] - arr[j+1];
}
/* More sorting algorithms */
void bucketsort (int arr[], unsigned char size, unsigned char n, void sort(int[],unsigned char)) {
// to be fixed
size /= sizeof(int); int *bucket[n]; unsigned char s[n];
for (unsigned char i = 0; i < n; i++) s[i] = 0, bucket[i] = NULL;
int min = arr[0], max = arr[0];
for (unsigned char i = 1; i < size; i++) {
if (arr[i] < min) min = arr[i];
if (arr[i] > max) max = arr[i];
} for (unsigned char i = 0; i < size; i++)
s[n*(arr[i]-min)/(max-min+1)]++,
bucket[n*(arr[i]-min)/(max-min+1)] = (int*)realloc(bucket[n*(arr[i]-min)/(max-min+1)],s[n*(arr[i]-min)/(max-min+1)]*sizeof(int)),
bucket[n*(arr[i]-min)/(max-min+1)][s[n*(arr[i]-min)/(max-min+1)]-1] = arr[i];
for (int i = 0; i < n; i++) {for (int j = 0; j < s[i]; j++) printf("%d ",bucket[i][j]); printf("\n");}
for (unsigned char i = 0; i < n; i++) sort(bucket[i],s[i]), fflush(NULL);
for (int i = 0, index = 0; i < n; i++) for (int j = 0; j < s[i]; j++) arr[index++] = bucket[i][j];
}
int main (void) {
int a[] = {3,6,4,9,1,7,5,8,2,0};
bucketsort(a,sizeof(a),4,bubblesort);
for (signed char i = 0; i < (signed char)(sizeof(a)/sizeof(int)); i++) printf("%d, ",a[i]);
}在我的函数参数中,我尝试用*替换[],但这没有任何区别。
发布于 2022-11-18 07:32:33
您必须删除"size /= size is (Int)“行,并且大小是正确的。
void bubblesort (int arr[], unsigned char size) {
// size /= sizeof(int);
for (unsigned char i = 0; i < size - 1; i++)
for (unsigned char j = 0; j < size - i - 1; j++)
if (arr[j] > arr[j+1])
arr[j] = arr[j] + arr[j+1],
arr[j+1] = arr[j] - arr[j+1],
arr[j] = arr[j] - arr[j+1];
}测试:
1 2 0
3 4
6 7 5
9 8
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ~"[Thread 26424.0x564c exited with code 0]https://stackoverflow.com/questions/74484588
复制相似问题