1

Тема: Швидке сортування без рекурсії(помилка)

class Program
{
    public static Stack<int> st = new Stack<int>();

    public static int[] random_mas;
    public static int l, r;
    static void Main(string[] args)
    {
        Random rr = new Random();
        random_mas = new int[10];
        for(int i = 0; i < random_mas.Length; i++)
        {
            random_mas[i] = rr.Next(0, 100);
            Console.Write(random_mas[i] + " ");
        }
        l = 0;
        r = random_mas.Length - 1;
        st.Clear();
        st.Push(l);
        st.Push(r);
        qsort();
        Console.WriteLine();
        for(int i = 0; i < random_mas.Length; i++)
        {
            Console.Write(random_mas[i] + " ");
        }
        Console.ReadKey();
    }

    public static void qsort()
    {
        int i = 0, j = 0;

        while(st.Count != 0)
        {
            j = st.Pop();
            i = st.Pop();
            l = i;
            r = j;

            int x = random_mas[l + (r - l) / 2];

            while(i <= j)
            {
                while(random_mas[i] < x) i++;
                while(random_mas[j] > x) j--;
                if(i <= j)
                {
                    int t = random_mas[i];
                    random_mas[i] = random_mas[j];
                    random_mas[j] = t;
                    i++;
                    j--;
                }
            }
            int a = 0;
            if(i < r)
            {
                st.Push(i);
                st.Push(r);
                a = 1;
            }
            if(l < j & a == 0)
            {
                st.Push(l);
                st.Push(j);
            }
            if(i > r && l > j)
            {
                st.Clear();
            }
        }
    }
}

Допоможіть знайти помилку

2

Re: Швидке сортування без рекурсії(помилка)

Запустіть в дебагері, так скоріше знайдете. Допомогло?

Подякували: leofun011

3 Востаннє редагувалося Mister (06.06.2016 18:47:10)

Re: Швидке сортування без рекурсії(помилка)

koala написав:

Запустіть в дебагері, так скоріше знайдете. Допомогло?

пробував, не допомогло її виявити(  :(

4

Re: Швидке сортування без рекурсії(помилка)

Ну тоді навіть не знаю, як вам допомогти. Ви ж єдиний, хто знає, в чому ця помилка проявляється, тому ми навряд вам допоможемо.

Подякували: leofun011

5

Re: Швидке сортування без рекурсії(помилка)

koala написав:

Ну тоді навіть не знаю, як вам допомогти. Ви ж єдиний, хто знає, в чому ця помилка проявляється, тому ми навряд вам допоможемо.

сортує не до кінця(якщо б хотіли то запустили *SCRATCH* )

6

Re: Швидке сортування без рекурсії(помилка)

Ну то почніть уважно дивитися в дебагері з того місця, звідки не сортує (якби хотіли, щоб допомогли по суті - надали б всю наявну інформацію, а не змушували людей щось робити).

7

Re: Швидке сортування без рекурсії(помилка)

Логічні помилки так важко знайти. Ну от я взявся проаналізувати даний код, і зовсім випадково наткнувся на можливу помилку, ну принаймі сортує масив:

76 рядок змінив наступним чином : if (l < j) , також видалив ініціалізацію змінної а.

Науковий метод :"Тик пальцем в небо працює завжди" 8)

Подякували: leofun011