【问题标题】:What's The Best Logic For Sort an Array?对数组进行排序的最佳逻辑是什么?
【发布时间】:2020-07-05 05:29:14
【问题描述】:

假设我们有一个 Int 数组:

int[] array = new int[5];

在这个数组里面,我们有 5 个随机数..

array = {10,5,7,0,3};

通过代码将该数组更改为该数组的最佳方法是什么

array[0]=0;
array[1]=3;
array[2]=5;
array[3]=7;
array[4]=10;

对于我来说,我想创建两个循环,一个是 i,一个是 j..

我将取位置 0 (i) 并将其与数组中的所有其他数字进行比较。我的意思是从(i + 1)开始到数组末尾(array.Length)的位置j。

然后当我发现数组[i] 大于数组[j] 时,我只需将第一个值更改为另一个...

当然在这里我需要声明变量来进行更改,如图所示:

int[] array = new int[5]{10,5,7,0,3};
int Change;
for(int i =0;i<array.Lenght;i++)  
{
    for(int j =i+1;j<array.Lenght;j++)  
     {
       if(array[i]>array[j])
        {
           change=array[i];
           array[i] = array[j];
           array[j] = change;
        }
    }
}

这是解决问题但即使我认为我不喜欢那个逻辑 ||该代码

如果你还有其他的,你能告诉我吗??

【问题讨论】:

  • 您对“最佳”的定义是什么?我怎么知道一种方法比另一种更好?我怎么知道我有最好的?你如何评价?您不喜欢当前代码的哪些方面?
  • 你应该在这里找到你需要的一切:youtube.com/user/AlgoRythmics

标签: c# algorithm logic


【解决方案1】:

您可以简单地使用Array.Sort 方法。

int[] array = new int[5] { 10, 5, 7, 0, 3 };
Array.Sort(array);

应 OP 的要求,我提供了优化的代码。这里的复杂度是 O(Square(N))。我建议你使用归并排序或快速排序,它们的复杂度为 O(NLogN)

int[] array = new int[5] { 10, 5, 7, 0, 3 };
int change = 0;
for (int i = 0; i <= array.Length - 2; i++)
{
    for (int j = 0; j <= array.Length - 2; j++)
    {
        if (array[j] > array[j + 1])
        {
            change = array[j + 1];
            array[j + 1] = array[j];
            array[j] = change;
        }
    }
}

【讨论】:

  • 你杀了我的逻辑先生哈哈谢谢你的帮助我很感激
  • @ZakariaRedouane 我为您提供了另一种解决方案,优化了您的代码,请参阅。
  • 哦,谢谢,这也是一个很好的解决方案
  • @ZakariaRedouane 如果回答了您的问题,您应该接受答案
  • 我想你的意思是O(NLogN),而不是O(LogN)
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 2021-08-28
  • 2010-09-06
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
相关资源
最近更新 更多