Быстрая сортировка (сортировка Хоара) - C#

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, мучаюсь второй день с быстрой сортировкой... И сразу показываю недоработанный код:
int[] array = { 3, 0, 1, 8, 7, 2, 5, 4, 9, 6 }; // подопытный массив =)                                              
            int save = 0; //переменная с помощью которой мы меняем местами елементы массива            
            int r = array.Length - 1; //переменная - длина массива (счет с 0)
            Console.WriteLine("Исходный массив:");
            for (int i = 0; i <= r; i++)
            {
                Console.Write("{0}, ",array[i]);                
            }       
                                  
            // БЫСТРАЯ СОРТИРОВКА (СОРТИРОВКА ХОАРА)     
            //опрным элементом(pivot) сделаем первый элемента массива
            for (int i = 0; ; ) //"бесконечный" цикл. Выход сделан с помощью break;
            {
                //сравниваем элементы массива
                if (array[i] >= array[r])
                {
                    //меняем местами 
                    save = array[i];
                    array[i] = array[r];
                    array[r] = save;
                    //--------------
                    i++;
                    for (; ; i++)//"бесконечный" цикл. Выход сделан с помощью break;
                    {
                        //сравниваем элементы массива
                        if (array[i] > array[r])
                        {
                            //меняем местами 
                            save = array[i];
                            array[i] = array[r];
                            array[r] = save;
                            //--------------
                            r--;
                            break; //выходим из внутреннего цикла
                        }
                    }
                }
                else { r--; }
                //если элементы "встретились", тогда выходим
                if (array[i] == array[r]) 
                {                    
                    break;
                }
            }            
            //вывод отсортированного на "половину" массива 
            Console.WriteLine("\n\nОтсортированный на "половину" массив:");
            for (int i = 0; i < array.Length; i++)
            {
                Console.Write("{0}, ", array[i]);
            }            
            //задержка консоли
            Console.ReadKey();
После выполнения сего кода, получится массив, разбитый на 2 подмассива и "среднее" число(pivot) - слева от него будут меньшие элементы(не отсортированные между собой), а справа большие (так же не отсортированы). Собственно вот и вопрос, как дальше продолжить в таком же стиле отсортировывать уже те два ПОДмассива(стоящие слева и справа от среднего числа)? Прочитал комментарий ниже, который помог мне понять дальнейшие действия, если правильно понял, то мне осталось с помощью РЕКУРСИИ "досортировать" массив и вуаля
Упростим алгоритм. Выбираем опорным первый (потом легко переделать на медиану). Массив: 3 7 1 5 9 , переставляем все что меньше опорного слева, а те что больше или равны - справа: 1 3 7 5 9 , массив разбился на два массива - слева от опорного и справа от него. Применяем этот же алгоритм к каждому из них и всё, получилась рекурсия, т.е. теперь мы работаем с массивами: 1-й состоящий только из 1, а 2-й: 7 5 9.
Если что, делал первую сортировку(до разделения) с помощью видео на YouTube и статьи в Wikiпро быструю сортировку. Чтобы лучше понять смысл, дополнительно брал еще материал с поиска Яндекс и этих двух видео с Ютуба: https://www.youtube.com/watch?v=kq_EM_7Wdt8 https://www.youtube.com/watch?v=Xgaj...QGS1&index=134

Решение задачи: «Быстрая сортировка (сортировка Хоара)»

textual
Листинг программы
andrew@debppc:~/workspace/c_diez/numbers$ gmcs QuickSort.cs 
andrew@debppc:~/workspace/c_diez/numbers$ ./QuickSort.exe 
Unsorted
3 9 4 6 4 1 2 3 2 8 7 7 
Sorted
1 2 2 3 3 4 4 6 7 7 8 9 
andrew@debppc:~/workspace/c_diez/numbers$

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5