首页 > 解决方案 > 使用快速排序算法对具有重复值的整数数组进行排序

问题描述

我正在尝试使用 C# 为学校完成一个项目,该项目要求用户输入数组的长度,然后让他们用整数填充数组。然后需要使用快速排序算法对数组进行排序,以将它们按从低到高的顺序排列。我的代码成功地做到了这一点,但如果用户在数组中输入任何重复的值,它就不起作用。

例如:

我想知道是否有人知道如果输入重复项如何处理。请记住,我仍在学习,因此感谢您的帮助。到目前为止的代码如下所示

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();
            }
        }
    }

标签: c#algorithmquicksort

解决方案


推荐阅读