使用quicksort算法对具有重复值的整数数组进行排序

时间:2018-06-14 05:00:09

标签: c# algorithm quicksort

我正在尝试使用C#完成学校项目,要求用户输入数组的长度,然后让它们用整数填充数组。然后需要使用快速排序算法对数组进行排序,以便将它们按从低到高的顺序排列。我的代码成功完成了此操作,但如果用户在数组中输入任何重复值,则无法正常工作。

例如:

  • 一系列[4,7,2,3,9]排序就好了。
  • [4,7,2,7,9]的数组不会因为副本7而排序。

我想知道是否有人知道如果输入重复项如何处理重复项。请记住,我仍在学习,所以任何帮助都表示赞赏。到目前为止的代码列在下面

using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace Quicksort
    {
        class Program
        {
            private static void Quick_Sort(int[] arr, int left, int right)
            {
                if (left < right)
                {
                    int pivot = Partition(arr, left, right);

                    if (pivot > 1)
                    {
                        Quick_Sort(arr, left, pivot - 1);
                    }
                    if (pivot + 1 < right)
                    {
                        Quick_Sort(arr, pivot + 1, right);
                    }
                }
            }
            private static int Partition(int[] arr, int left, int right)
            {
                int pivot = arr[left];
                while (true)
                {

                    while (arr[left] < pivot)
                    {
                        left++;
                    }
                    while (arr[right] > pivot)
                    {
                        right--;
                    }
                    if (left < right)
                    {
                        if (arr[left] == arr[right]) return right;
                        int temp = arr[left];
                        arr[left] = arr[right];
                        arr[right] = temp;
                    }
                    else
                    {
                        return right;
                    }
                }
            }
            static void Main(string[] args)
            {

                Console.Write("\nProgram for sorting a numeric array using Quick Sorting");
                Console.Write("\n\nEnter number of elements: ");
                int max = Convert.ToInt32(Console.ReadLine());
                int[] arr = new int[max];

                for (int i = 0; i < max; i++)

                {
                    Console.Write("\nEnter [" + (i + 1).ToString() + "] element: ");
                    arr[i] = Convert.ToInt32(Console.ReadLine());
                }
                Console.WriteLine("Original array : ");
                foreach (var item in arr)
                {
                    Console.Write(" " + item);
                }
                Console.WriteLine();

                Quick_Sort(arr, 0, arr.Length - 1);

                Console.WriteLine();
                Console.WriteLine("Sorted array : ");
                foreach (var item in arr)
                {
                    Console.Write(" " + item);
                }
                Console.WriteLine();
                Console.ReadLine();
            }
        }
    }

0 个答案:

没有答案