【问题标题】:Sort an array of numbers into ascending order and find the position of a number within the list将一组数字按升序排序,并找到一个数字在列表中的位置
【发布时间】:2017-10-28 02:05:20
【问题描述】:

我生成了一个未排序的值数组,我想将其按升序排列并确定最后一个数字的新位置。

我之前曾在其他较小的输入上成功尝试过,但被困在列表包含 1824300 个值的最后一个输入上,并且终端根本不会运行排序算法...

#include <stdio.h>

int main(void)
{
  signed value = 16239, num = 1824300, i, j;
  signed temp;
  signed arr[num];

  arr[0] = value;
  printf("Your initial array is:\n");
  printf("%i\n", arr[0]);

  for (i = 1; i < num; i++)
  {
   value = (value*31334)%31337;
   arr[i]= value;
   printf("%i:  ", i);
   printf("%i\n", arr[i]);
  }

// Insertion sort
 for(i = 1; i < num; i++)
 {
  j = i;
  temp = arr[j];

  while((j > 0) && (arr[j - 1] > temp))
    {
      arr[j] = arr[j -1];
      arr[j - 1] = temp;
      j--;
    }
}
insertion sort //

printf("Your sorted array is:\n");

for(i = 0; i < num; i++)
{
  printf("%i:  ", i);
  printf("%i\n", arr[i]);
}

return 0;
}

有人可以帮我吗? 附言我对编程完全陌生,所以我的代码可能非常低效和混乱,对此感到抱歉! 非常感谢!!!

【问题讨论】:

  • 最坏情况下的插入排序是O(n^2) 算法。有近 200 万个条目,您可能已经耗尽了系统的资源。
  • 你应该看看更有效的排序算法。插入排序以 O(n^2) 运行,这意味着对于大小为 n 的输入数组,它需要 n^2 次比较。一个更好的算法例如是在 O(n log n) 中运行的快速排序。
  • 合并排序在概念上非常简单,而且比您在这里所做的要高效得多。使用 2M 条目,递归深度将在 20 多度,当然没有问题。不管你最终排序,一旦完成,搜索你喜欢的元素:即使是线性搜索也比最快的基于比较的排序方法更好。当然,使用排序列表,您可以根据需要进行二进制搜索,但何必费心。
  • 或者,您可以调用内置的qsort 函数。见tutorialspoint.com/c_standard_library/c_function_qsort.htm
  • 排序如何“卡住”?是停止了,等待记忆吗?是不是太慢了?您可以使用一两个战略性放置的print 语句来跟踪进度。此外,更有效的排序算法很容易在线搜索。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。

标签: algorithm sorting


【解决方案1】:

所以基本上下面是我最后所做的。我只是插入了一个简单的计数器!它工作正常......感谢所有试图提供帮助的人。您的回答对我很有价值,我仍在学习如何将算法实现为代码,这对我来说有点困难,因为我之前没有编程经验:(((虽然算法一点也不难理解......

signed count;
count = 0;
for (i = 0; i < num; i++)
{
  if (arr[i] <= value)
  {
  count = count + 1;
  }
}
printf("This is the index of your output in a sorted list: \n");
printf("%i\n", count);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多