C 如何删除元素以对数组进行排序
我必须制作一个程序,将数组按升序排序,这是我的代码,通过查找最大的元素,然后将其分配给第二个数组,然后从第一个数组中删除该元素,这样我可以在其中找到第二个最大的元素,然后将其重新分配到第二个数组的第二个位置。这是我的密码:C 如何删除元素以对数组进行排序,c,arrays,sorting,do-while,C,Arrays,Sorting,Do While,我必须制作一个程序,将数组按升序排序,这是我的代码,通过查找最大的元素,然后将其分配给第二个数组,然后从第一个数组中删除该元素,这样我可以在其中找到第二个最大的元素,然后将其重新分配到第二个数组的第二个位置。这是我的密码: #include <stdio.h> #include <conio.h> int main(){ int x; scanf("%d", &x); int arr[x], arr1[x]; int i;
#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();
}
}
但由于某些原因,它不会分配第二个数组的第二个值。sizeofarr1int k = 0;
arr1[k] = max;
k++;
是错误的,对于do…的每次迭代,它都会将k初始化为0,因此每次都会覆盖arr1[0]元素值。请删除int k=0;从循环内部。这段代码
int k = 0;
arr1[k] = max;
k++;
将始终将arr1[0]设置为max,因为您将k=0;在前一行中。我认为可以使用stdlib.h中的qsort函数对数组进行排序,然后复制到另一个数组。另外,苏拉夫·戈什(Sourav Ghosh)也做得对。您不需要使用2个阵列。。。 您只需使用一个数组就可以完成整个任务
#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个最大值,第x-1个最大值,第x-2个最大值。。。在每次迭代中。您的程序毫无意义。考虑到如果不使用第二个数组而对原始数组进行排序,可能会更简单。