【问题标题】:Calculate time of quick sort for each of elements in array计算数组中每个元素的快速排序时间
【发布时间】:2020-10-05 21:43:12
【问题描述】:

我有一个练习,我必须将快速排序的时间与数组中的每个元素进行比较并制作图表。 Array 有 10 个由 Random 函数生成的各种元素。

我可以通过代码计算所有元素的时间:

            Stopwatch MyTimer = new Stopwatch();
            MyTimer.Start();
            Console.WriteLine("Quick Sort: ");
            quickSort(arr);
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + ", ");
            }
            MyTimer.Stop();
            Console.WriteLine("\nTime: " + MyTimer.Elapsed);

但是我如何计算这个数组中每个元素的时间呢?

我的所有代码如下:

        static void Main(string[] args)
        {
            int[] arr = new int[10];
            shape(arr);
            Console.WriteLine();
            Console.WriteLine("Quick Sort");
            quickSort(arr, 0, 9);
            Console.WriteLine("\nSorted Array is: ");
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
        static public int Partition(int[] arr, int left, int right)
        {
            int pivot;
            pivot = arr[left];
            while (true)
            {
                while (arr[left] < pivot)
                {
                    left++;
                }
                while (arr[right] > pivot)
                {
                    right--;
                }
                if (left < right)
                {
                    int temp = arr[right];
                    arr[right] = arr[left];
                    arr[left] = temp;
                }
                else
                {
                    return right;
                }
            }
        }
        static public void quickSort(int[] arr, int left, int right)
        {
            int pivot;
            if (left < right)
            {
                pivot = Partition(arr, left, right);
                if (pivot > 1)
                {
                    quickSort(arr, left, pivot - 1);
                }
                if (pivot + 1 < right)
                {
                    quickSort(arr, pivot + 1, right);
                }
            }
        }
        static void shape(int[] arr)
        {
            Random rnd = new Random();
            Console.WriteLine("\nArray to sort: ");
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = rnd.Next(1, 200);
                Console.Write(arr[i] + ", ");
            }
            Console.WriteLine();
        }
    }
}

【问题讨论】:

    标签: c# quicksort


    【解决方案1】:

    如果要计算中间时间,可以使用 ElapsedMilliseconds

           long[] lapse = new long[arr.Length];
           for (int i = 0; i < arr.Length; i++)
            {
                var timer = MyTimer.ElapsedMilliseconds;
                Console.Write(arr[i] + ", ");
                lapse[i] = MyTimer.ElapsedMilliseconds - timer;  //in millisecond
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多