为什么我的快速排序可以使用10个或更少的整数,但不能更多?

问题描述 投票:-1回答:2

我正在尝试对整数数组进行排序。我的快速排序算法可以很好地处理10个或更少的数字,但是一旦添加更多,就不能正确对它们进行排序?

无论是否有Shuffle(左,右),它都以相同的方式工作,所以我认为问题不存在。我将使用该代码对大量数字进行排序,我认为快速排序是我数据中最有效的选择。

   private static int[] intArray;

   static void Main(string[] args)
   {
       data = new int[] { 1, 9, 10, 2, 4, 5, 6, 3, 257, -6 };
       int N = data.Length;
       intArray = new int[N];

       long before = Environment.TickCount;
       long after = Environment.TickCount;

       QuickSort(0, N - 1);

       for (int i = 0; i < data.Length; i++)
       {
           Console.WriteLine(data[i]);
       }
   }

   private static int Pivot(int left, int right)
   {
       int pivot = data[left];
       while (true)
       {
           while (data[left] < pivot)
           {
               left++;
           }

           while (data[right] > pivot)
           {
               right--;
           }

           if (left < right)
           {
               if (data[left] == data[right])
               {
                   return right;
               }

               int temp = data[left];
               data[left] = data[right];
               data[right] = temp;
           }
           else
           {
               return right;
           }
       }
   }

   private static void QuickSort(int left, int right)
   {
       Shuffle(left, right);
       if (left < right)
       {
           int pivot = Pivot(left, right);

           if (pivot > 1)
           {
               QuickSort(left, pivot - 1);
           }
           else if (pivot + 1 < right)
           {
               QuickSort(pivot + 1, right);
           }
       }
   }
c# quicksort
2个回答
0
投票

Shuffle()看起来像这样:


0
投票

修正了注释中指出的问题。随机播放使它相对较慢:

© www.soinside.com 2019 - 2024. All rights reserved.