【问题标题】:Transferring sorting loop results to another array将排序循环结果转移到另一个数组
【发布时间】:2014-02-06 17:40:31
【问题描述】:

这是一个将数组从最小值排序到最大值的循环,我需要将此循环的结果放入另一个数组中,以便过滤和删除仅出现一次的数字并找到剩下的最后一个成员。

这是我目前的代码:

#include<stdio.h>
#include<conio.h>
#define buffas 1024
void main() {
    int arr[buffas],i,j,element,no,temp;

    printf("\nEnter the no of Elements: ");
    scanf("%d", &no);
    for(i=0; i<no; i++) {
        printf("\n Enter Element %d: ", i+1);
        scanf("%d",&arr[i]);
    }
    for(i=0; i<no; i++) {
        for(j=i; j<no; j++) {
            if(arr[i] > arr[j]) {
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    printf("\nSorted array:");

    for(i=0; i<no; i++) {
        printf("\t%d",arr[i]);
    }

    getch();
}

如何更改

printf("\t%d",arr[i]);  

填充另一个数组,然后对其进行排序以删除单个条目并仅保留至少重复一次的条目。
例如。第一个数组是

2 2 1 6 9 9

第二次排序后的结果应该是

2 2 9 9

【问题讨论】:

  • 您能否编辑您的帖子并缩进并评论您的代码?
  • 好像是作业问题,你有没有尝试实现二次排序?
  • 抱歉缩进,我似乎无法正确处理。我没有尝试二次排序,我该怎么做?
  • 通过遍历有序数组的每个元素,可以检查下一个或前一个元素是否与当前元素相同(考虑边界),如果是,则将其添加到第二个数组.
  • 遍历排序后的数组,找到具有相同值的行范围,并将这些行复制到目标数组。您只需要计算每个行值的重复次数。

标签: c arrays sorting loops


【解决方案1】:
#include <stdio.h>

#define buffas 16

int main(void)
{
  /* Instead of original input and sorting code */
  int arr[] = { 1, 2, 2, 6, 9, 9, 10, 10, 10, 11, 12, 13, 14 };
  int no = sizeof(arr) / sizeof(arr[0]);

  /* Code to copy only duplicated elements in arr */
  int copy[buffas];
  int n = 0;
  for (int i = 0; i < no; i++)
  {
    int j;
    for (j = i + 1; j < no; j++)
    {
      if (arr[i] != arr[j])
        break;
    }
    if (j - i > 1)
    {
      for (int k = i; k < j; k++)
        copy[n++] = arr[k];
      i = j - 1;
    }
  }

  /* Print results for verification */
  for (int i = 0; i < n; i++)
    printf("c[%d] = %d\n", i, copy[i]);
  return 0;
}

代码已经运行了不同长度的排序数组和数组中的不同数据;这似乎是正确的。上面的代码产生了输出:

c[0] = 2
c[1] = 2
c[2] = 9
c[3] = 9
c[4] = 10
c[5] = 10
c[6] = 10

请注意,代码使用了在for 循环控制语句中声明变量的C99 特性;如果您在 Windows 上并且没有 C99 支持,则需要在循环外声明 ik。如果您使用的是 GCC,则需要添加 -std=c99 或类似选项。

【讨论】:

  • 谢谢你,这非常有帮助!
猜你喜欢
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2014-03-17
  • 1970-01-01
  • 2023-01-29
  • 2015-09-22
相关资源
最近更新 更多