我遇到创建程序的问题,该程序将首先对每个数组进行排序,然后将它们放在一起并对它们进行排序。我的程序失败的任何想法? 在输出中,它会创建如下随机数:
4204988
3
4
4
5
5
6
7
7
8
正如您所看到的,有9个已排序的数字,但我不知道它是数组还是已经使用数组排序的数组。除了11之外,应该有20个数字,其中前1个没有任何意义。
void sort(int arr[], int howmany)
{
int i, switchh;
while(1)
{
switchh = 0;
for(i = 0; i < howmany - 1; i++)
{
if(arr[i] > arr[i + 1])
{
int switching = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = switching;
switchh = 1;
}
}
if(switchh == 0)
break;
}
}
void sortt(int arrr[], int howmany)
{
int i, switchh;
while(1)
{
switchh = 0;
for(i = 0; i < howmany - 1; i++)
{
if(arrr[i] > arrr[i + 1])
{
int switching = arrr[i];
arrr[i] = arrr[i + 1];
arrr[i + 1] = switching;
switchh = 1;
}
}
if(switchh == 0)
break;
}
}
int main(void)
{
srand((unsigned)time(0));
int howmany = 10;
int arr[howmany];
int swichh;
int arrr[howmany];
int i=0,j=0;
for(i = 0; i < howmany; i++)
arr[i] = rand() % 10 + 1;
for(i = 0; i < howmany; i++)
arrr[i] = rand() % 10 + 1;
sort(arr, howmany);
sortt(arrr, howmany);
for( ; ; )
{
if (arr[i]>arrr[j])
{
printf("%d\n",arr[i]) ;
i++;
}
else
{
if (arrr[j]>arr[i])
{
printf("%d\n",arrr[j]);
j++;
}
}
if ((i == howmany) || (j == howmany))
break;
}
return 0;
}
答案 0 :(得分:2)
首先,您不需要两个sort
函数。编写函数的基本目的不是强制重复编写同一组指令。虽然我觉得您需要更多地了解功能,如果您不清楚这一点。
由于howmany
和arr
中有arrr
个元素,因此合并它们循环需要运行2*howmany
次。如果你什么都不懂,请告诉我。 :)
void sort(int arr[], int howmany)
{
int i, switchh;
while(1)
{
switchh = 0;
for(i = 0; i < howmany - 1; i++)
{
if(arr[i] > arr[i + 1])
{
int switching = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = switching;
switchh = 1;
}
}
if(switchh == 0)
break;
}
}
int main(void)
{
srand((unsigned)time(0));
int howmany = 10;
int arr[howmany];
int swichh;
int arrr[howmany];
int i=0,j=0, count=0;
for(i = 0; i < howmany; i++)
arr[i] = rand() % 10 + 1;
for(i = 0; i < howmany; i++)
arrr[i] = rand() % 10 + 1; //since value of i has changed now
i=0;
sort(arr, howmany);
sort(arrr, howmany);//currently both i and j are zero
for( count = 0; count < 2*howmany ; count++ )
{
if( i > howmany-1)
{
printf("%d\n",arrr[j]);
j++;
}
else if( j > howmany-1)
{
printf("%d\n",arr[i]);
i++;
}
else if (arr[i]<arrr[j])
{
printf("%d\n",arr[i]) ;
i++;
}
else
{
printf("%d\n",arrr[j]);
j++;
}
}
return 0;
}