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();
          }
    }
但由于某些原因,它不会分配第二个数组的第二个值。

sizeofarr1 这就是为什么do..while循环只执行一次

此外,正如Danioff提供的答案中所建议的

int 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个最大值。。。在每次迭代中。

您的程序毫无意义。考虑到如果不使用第二个数组而对原始数组进行排序,可能会更简单。