gpt4 book ai didi

c - Array - 在 C 中按模数组排序

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:12 29 4
gpt4 key购买 nike

嘿伙计们,我正在尝试完成我的代码,但我没有获取值,而是获取了值的地址。这是为什么?
算法构建正确吗?我需要对用户接收的数组进行排序。所有被m整除后等于0的数都会出现在数组的开头,所有被m整除的数 等于 1 将紧随其后,其余两个数字将在后面出现,依此类推。将在 m 上分配等于 m-1 的剩余数字。

这是我的输出:

output of my code

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void SortByModulo(int *arr,int m,int length);
void main()
{ int length,m,i;
int *arr;
printf("Please inseret array length:\n");
scanf("%d" ,&length);
arr=(int *)malloc(length*sizeof(int));
if(!arr) // Terms - if there is not enough memory,print error msg and exit the program.
{
printf("alloc failed\n");
return ;
}
for(i=0; i<length; i++)
arr[i]=(int)malloc(length*sizeof(int)); // Allocate memory for each row
printf("Please inseret %d elemetns :\n",length);
for (i=0 ; i<length ; i++)
{
scanf("%d" , arr[i]);
}
printf("Insert a natural number that you want to sort by modulo:\n");
scanf("%d" ,&m);
SortByModulo(arr,m,length);
system("pause");
return;
}
void SortByModulo(int *arr,int m,int length)
{ int i,j,temp,k;
for ( i=length ; i>1 ; i--)
{
for ( j=0 ; j<i-1 ; j++)
{
if((arr[j]%m)>(arr[j+1]%m))
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}

}
}
for (j=0 ; j<length ; j++)
{
printf("%d ", arr[j]);
}
printf("\n");
}

最佳答案

首先:你有内存泄漏!和 arr[i]=(int)malloc(length*sizeof(int)); 是不需要的。您只需要一个一维数组(arr 的声明是正确的)。删除以下代码:

for(i=0; i<length; i++)
arr[i]=(int)malloc(length*sizeof(int)); // Allocate memory for each row

注意:不要通过malloc()calloc() 函数强制转换返回地址。阅读:Do I cast the result of malloc() and calloc()

scanf 中第二个丢失的&:

  scanf("%d", arr[i]);
// ^ & missing

应该是:

  scanf("%d", &arr[i]);

关于c - Array - 在 C 中按模数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916933/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com