如何停止此代码的迭代我正在使用选择排序算法,如果数组已经排序,我希望迭代停止

Posted

技术标签:

【中文标题】如何停止此代码的迭代我正在使用选择排序算法,如果数组已经排序,我希望迭代停止【英文标题】:How to stop the iterations of this code i am using the selection sort algorithm and i want the iterations to stop if the array is already sorted 【发布时间】:2021-08-12 16:24:48 【问题描述】:

这是我当前的代码,我放置了额外的 foreach,所以我可以看到迭代。我需要在数组已经排序后立即停止代码,我想到的是休息;如果程序两次打印相同的数组,则使用布尔值,因为这意味着已经没有更改并且数组已经排序。

  static void Main(string[] args)
     
        int[] array =  12, 114, 5, 10, 14 ;
        foreach (int item in array) Console.Write("\t" + item);
        Console.WriteLine("\n Press Enter key to start the selection...");
        Console.ReadLine();


        for (int i = 0; i < array.Length - 1; i++)
        
            int indexofSmallests = i;
            //comparison to find the smallest element in the unsorted array

            for (int j = i + 1; j < array.Length; j++)
            
                if (array[j] < array[indexofSmallests])
                 indexofSmallests = j;
            
            //swapping part of the program
            int temp = array[i]; // temporarily storing the first element
            array[i] = array[indexofSmallests]; // copying of the smallest element
            array[indexofSmallests] = temp;

            
            foreach (int item in array) Console.Write("\t" + item);//Code so i can see the iterations

            Console.ReadLine();
        
        Console.WriteLine("\n Sorted Array: ");// printing the final iterations
        foreach (int item in array) Console.Write("\t" + item);
        Console.ReadLine();

【问题讨论】:

目标是什么?只是为了学习?通常你会使用内置的排序方法,如果你想要一个非常简单的排序,插入排序有更好的最佳情况性能。 【参考方案1】:

您需要检查内部循环期间是否需要排序:

bool stopSort = true;

for (int j = i + 1; j < array.Length; j++)

    if (array[j] < array[indexofSmallests])
        indexofSmallests = j;
    if (array[j] < array[i])
        stopSort = false;


if (stopSort)
    break;

【讨论】:

以上是关于如何停止此代码的迭代我正在使用选择排序算法,如果数组已经排序,我希望迭代停止的主要内容,如果未能解决你的问题,请参考以下文章

Day2:选择排序和两数相加

我正在尝试使用 c++ STL 制作 prims 算法。在迭代器第一次迭代后,它会停止代码并给出错误的输出

选择排序,但每次迭代只有一个开关

迭代快速排序方法的分区算法问题

增加线程数,但程序不能更快地运行 C++ OpenMP 选择排序

用JavaScript实现排序算法