Рассчитать время быстрой сортировки для каждого элемента в массиве - PullRequest
2 голосов
/ 16 июня 2020

У меня есть упражнение, в котором мне нужно сравнить время быстрой сортировки с каждым элементом в массиве и построить график. Массив состоит из 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();
        }
    }
}

1 Ответ

0 голосов
/ 16 июня 2020

, если вы хотите рассчитать промежуточное время, вы можете использовать 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
        }
...