我必须编写一个程序,将数组按升序排序,这是我的代码,方法是找到最大的元素,然后将其分配给第二个数组,然后从第一个数组中删除该元素,这样我可以找到其中第二大的一个,然后将其重新分配给第二个数组的第二个位置。这是我的代码:
#include <stdio.h>
#include <conio.h>
int main(){
int x;
scanf("%d", &x);
int arr[x], arr1[x];
int i;
for(i = 0; i < x; i++){
scanf("%d", &arr[i]);
}
do{
int j, max = 0;
for(j= 0; j < x; j++){
if(arr[j] > max){
max = arr[j];
}
}
int k = 0;
arr1[k] = max;
k++;
}while(sizeof(arr1) < sizeof(arr));
int l;
for(l = 0; l < x; l++){
printf("%d\n", arr1[l]);
getch();
}
}
但由于某种原因,它没有分配第二个数组的第二个值。
最佳答案
sizeof(arr1) < sizeof(arr)
这将始终评估为 FALSE
,因为两个数组的大小相同,如代码所示。
这就是为什么 do..while
循环只执行一次。
此外,正如 Daniofb 提供的答案中所建议的,
int k = 0;
arr1[k] = max;
k++;
对于 do...while
的每次迭代都是错误的,它将初始化 k
至0
,因此,您最终将覆盖 arr1[0]
每次的元素值。请删除int k = 0;
从循环内部。
关于c - 如何删除一个元素来对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27637063/