Heim > Backend-Entwicklung > C#.Net-Tutorial > Wie sortiere ich 0,1,2 in einem Array (niederländische Flagge) ohne zusätzlichen Platz mit C#?

Wie sortiere ich 0,1,2 in einem Array (niederländische Flagge) ohne zusätzlichen Platz mit C#?

PHPz
Freigeben: 2023-08-26 11:01:12
nach vorne
1367 Leute haben es durchsucht

如何使用 C# 在没有额外空间的情况下对数组(荷兰国旗)中的 0,1,2 进行排序?

Wir brauchen drei Punkte: niedrig, mittel, hoch. Wir verwenden niedrige und mittlere Zeiger am Anfang und hohe Zeiger zeigen auf das Ende des angegebenen Arrays.

Wenn Array [mid] =0, tauschen Sie Array [mid] mit Array [low]] aus und erhöhen Sie beide Zeiger einmal.

Wenn array[mid] = 1, ist kein Austausch erforderlich. Erhöhen Sie den mittleren Zeiger einmal.

Wenn Array [mid] = 2, tauschen Sie Array [mid] mit Array [high] aus und dekrementieren Sie den oberen Zeiger einmal.

Zeitkomplexität - O(N)

Beispiel

Echtzeitdemonstration

using System;
namespace ConsoleApplication{
   public class Arrays{
      private void Swap(int[] arr, int pos1, int pos2){
         int temp = arr[pos1];
         arr[pos1] = arr[pos2];
         arr[pos2] = temp;
      }
      public void DutchNationalFlag(int[] arr){
         int low = 0;
         int mid = 0;
         int high = arr.Length - 1;
         while (mid <= high){
            if (arr[mid] == 0){
               Swap(arr, low, mid);
               low++;
               mid++;
            }
            else if (arr[mid] == 2){
               Swap(arr, high, mid);
               high--;
            }
            else{
               mid++;
            }
         }
      }
}
class Program{
   static void Main(string[] args){
         Arrays a = new Arrays();
         int[] arr = { 2, 1, 1, 0, 1, 2, 1, 2, 0, 0, 1 };
         a.DutchNationalFlag(arr);
         for (int i = 0; i < arr.Length; i++){
            Console.WriteLine(arr[i]);
         }
         Console.ReadLine();
      }
   }
}
Nach dem Login kopieren

Ausgabe

0 0 0 0 1 1 1 1 2 2 2
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie sortiere ich 0,1,2 in einem Array (niederländische Flagge) ohne zusätzlichen Platz mit C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage