0

введите сюда описание изображенияНа определенном этапе программа просто прекращает работу.

using System;
using System.Diagnostics;

class InsertionSort {

// Функция сортировки массива с использованием сортировки вставкой
void sort(int[] arr)
{
    int n = arr.Length;
    for (int i = 1; i < n; ++i) {
        int key = arr[i];
        int j = i - 1;

        // Переместить элементы arr [0..i-1], которые больше, чем key, на одну позицию впереди их текущей позиции
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

// Функция для печати массива размера n
static void printArray(int[] arr)
{
    int n = arr.Length;
    for (int i = 0; i < n; ++i)
        Console.Write(arr[i] + " ");

    Console.Write("\n");
}

// Запуск кода
public static void Main()
{
    Stopwatch sw = new Stopwatch();
    int[] arr = new int[150000];
    Random rd = new Random();
    for(int i=0; i<arr.Length; ++i){
        arr[i] = rd.Next(10,150001);
    }
    sw.Start();
    Console.WriteLine("Given Array");
    printArray(arr);
    InsertionSort ob = new InsertionSort();
    //ob.sort(arr, 0, arr.Length - 1);
    ob.sort(arr);
    Console.WriteLine("\nSorted array");
    printArray(arr);
    sw.Stop();
    Console.WriteLine("Sorted time= {0} ", (sw.ElapsedMilliseconds / 1000.0).ToString());
    sw.Reset();

}

}

  • 3
    На определенном откройте уж секрет. – aepot Nov 10 '21 at 17:19
  • 1
  • aepot, ну я запускал в online gdb. Программа некоторое время выполняется(примерно минуту), потом останавливается и висит просто. Дальше выводит error 9 и все. Не знаю в чем проблема, мб с избытком памяти – chessmaster987 Nov 10 '21 at 17:28
  • error9 и всё, совсем всё? наверняка там были ещё какие-то буквы, слова, предложения – CrazyElf Nov 10 '21 at 17:29
  • А вообще у вас судя по всему O(n^2) получается, для такого числа элементов это, вероятно, просто долго будет вообще. Помимо ошибок. – CrazyElf Nov 10 '21 at 17:31
  • CrazyElf да, только это. я чекнул это вроде run time error. И если можете, подскажите пжлст как упростить до О(n)? – chessmaster987 Nov 10 '21 at 17:54
  • CrazyElf дополнил скриншот выполнения программы – chessmaster987 Nov 10 '21 at 17:56
  • 2
    InsertionSort является квадратичной сортировкой, нельзя от него ожидать быстрой работы на больших массивах. Другую сортировку используйте. – MBo Nov 10 '21 at 18:07
  • MBo я это понимаю, просто задание такое. нужно измерить время сортировки вставками для массива в 1000000 элементов :( – chessmaster987 Nov 10 '21 at 18:13
  • ОК, а может кто знает вообще примерно +- сколько времени insertion будет сортировать миллионный массив. хотя бы приблизительно – chessmaster987 Nov 10 '21 at 18:39
  • @chessmaster987, пусть на миллиард (10^9) операций уходит примерно секунда. Тогда на сортировку (10^6)^2 = 10^12 элементов уйдёт 10^(12-9) = 10^3 = 1000 секунд, но это нижняя грань, по факту будет больше, и возможно, в несколько раз – Sunny Cove Nov 10 '21 at 19:49
  • Пишете миллион, а в коде 150к. Где правда? Кстати, exit code 9 означает вот что https://stackoverflow.com/a/40901193/12888024 – aepot Nov 10 '21 at 20:15
  • а может кто знает вообще примерно +- сколько времени insertion будет сортировать миллионный массив - закомментируйте оба вызова printArray, вы никогда не дождетесь вывода миллиона чисел в консоль. Sorted time= 1151,207. – aepot Nov 10 '21 at 21:07
  • @aepot Я этот ответ тоже нагуглил, но там про линукс пишут. В windows тоже самое, это тоже out of memory? – CrazyElf Nov 11 '21 at 05:30

0 Answers0