首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数参数函数不能用数组操作

函数参数函数不能用数组操作
EN

Stack Overflow用户
提问于 2022-11-18 03:26:02
回答 1查看 43关注 0票数 -1

我试图用变量函数参数在c中创建一个函数桶排序数组,以便对每个桶进行排序,所以我试图传递bubblesort算法,但它似乎对每个桶没有任何作用,我的问题是:我做错了什么?,乍一看,我的代码中似乎没有错误:(抱歉,给您带来了麻烦)

代码语言:javascript
复制
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]);
 }

在我的函数参数中,我尝试用*替换[],但这没有任何区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-18 07:32:33

您必须删除"size /= size is (Int)“行,并且大小是正确的。

代码语言:javascript
复制
    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];
    }

测试:

代码语言:javascript
复制
    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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74484588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档