c - 按降序对数组中的奇数进行排序

标签 c arrays sorting srand

我正在编写一个代码,它将:

  1. 打印随机数数组
  2. 按升序排列
  3. 从该数组中查找奇数
  4. 将奇数按降序排列。

我已经完成了前三个,但我无法将奇数按降序排列。该程序将随机数按降序排序,而不仅仅是奇数。请帮我。谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int size,i,j,temp;
    int a[50];

    printf("Enter array size| ");
    scanf("%i",&size);

    srand(time(0));

    printf("\nThe Random Numbers| \n");
    for(i=0;i<size;i++){
        a[i] = rand()%100;
        printf("%i, ",a[i]);
    }

    for (i=0;i<size;++i)
    {
        for (j=i+1;j<size;++j)
        {
            if (a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    printf("\n\nThe Ascending Order of Random Numbers| \n");
    for (i=0;i<size;++i)
        printf("%d, ", a[i]);


    printf("\n\nThe Odd Numbers| \n");
    for(i=0;i<size;i++){
        if(a[i]%2!=0){
            printf("%i, ",a[i]);
        }
    }

    for(i=0;i<size;i++){
        for(j=i+1;j<size;j++){
            if(a[i]<a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }

    printf("\n\nThe Descending Order of Odds| \n");
    for(i=0;i<size;i++)
        printf("%d ",a[i]);

    return 0;
}

最佳答案

n视为数组length -1并查看以下伪代码:

for each i in n {
      if a[i] even:
          continue
      for each j in n {
          if a[j] even:
              continue
          if(a[i]<a[j])
              swap(a[i], a[j])
      }
}

在这种情况下,您忽略偶数并仅修改包含奇数值的数组位置。

这是c代码:

for(i=0;i<size;i++){
    if(a[i]%2!=0) {
        for(j=i+1;j<size;j++){
            if((a[j]%2!=0) && (a[i]<a[j]))
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        } // end of j for loop
    } // end of if odd
} // end of i for loop

关于c - 按降序对数组中的奇数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52986732/

相关文章:

java - 对数组进行排名(不排序或创建对象)并保留原始索引

java - 如何在字符串数组中搜索特定字符串

java - 如何从流中获取列表列表而不是数组列表?

javascript - 如何在 Handsontable 中创建跨越两列的行标题?

sorting - Dart 中检查列表是否已排序的常用方法是什么?

algorithm - 使用中间元素作为枢轴的快速排序算法状态

c - 如何在Linux上的多线程下获取用户堆栈的底部

c - 试图使连续的 FIFO 数据流

c - C 中与 argp 互斥的选项

c - SSE 内部函数 : Fastest way to test for all 0s or 1s?