我必须创建一个程序,将数组按升序排序,这是我的代码是通过找到最大的元素,然后将其分配给第二个数组,然后从第一个数组中删除此元素来做到这一点,所以我可以找到第二大的,然后将其重新分配到第二个阵列的第二个位置。这是我的代码:
#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();
}
}
但由于某种原因,它没有分配第二个数组的第二个值。
答案 0 :(得分:3)
sizeof(arr1) < sizeof(arr)
这将始终评估为FALSE
,因为两个数组的相同大小,如代码所示。
这就是为什么do..while
循环只执行一次。
另外,正如Daniofb提供的答案所示,
int k = 0;
arr1[k] = max;
k++;
错误,就像do...while
的每次迭代一样,它会将k
初始化为0
,因此,每次都会覆盖arr1[0]
元素值。请从循环内删除int k = 0;
。
答案 1 :(得分:2)
这段代码
int k = 0;
arr1[k] = max;
k++;
将始终将arr1[0]
设置为max
,因为您在上一行中设置了k = 0;
。我想你可以使用qsort
中的stdlib.h
函数对数组进行排序,然后复制到另一个数组。 Sourav Ghosh也是对的。
答案 2 :(得分:0)
您不需要使用2个数组...
你只需要使用1个数组即可完成所有工作...
#include <stdio.h>
#include <conio.h>
int main(){
int x;
scanf("%d", &x);
int arr[x];
int i;
for(i = 0; i < x; i++){
scanf("%d", &arr[i]);
}
// k is for the k'th maximum value
int k=x-1;
do{
int j, max_ind = 0; // max_ind = for k'th maximum value position
for(j = 1; j <= k; j++){
if(arr[j] > arr[max_ind]){
max_ind = j;
}
}
// max_ind is the k'th '
// Swapping with k'th position value
int temp=arr[max_ind];
arr[max_ind]=arr[k];
arr[k]=temp;
k--;
}while(k>0);
int l;
for(l = 0; l < x; l++){
printf("%d\n", arr[l]);
getch();
}
}
这里我们在每次迭代中计算x'th maximum, x-1'th maximum, x-2'th maximum...
。