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

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

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

Помогите, пожалуйста, мучаюсь второй день с быстрой сортировкой... И сразу показываю недоработанный код:
Листинг программы
  1. int[] array = { 3, 0, 1, 8, 7, 2, 5, 4, 9, 6 }; // подопытный массив =)
  2. int save = 0; //переменная с помощью которой мы меняем местами елементы массива
  3. int r = array.Length - 1; //переменная - длина массива (счет с 0)
  4. Console.WriteLine("Исходный массив:");
  5. for (int i = 0; i <= r; i++)
  6. {
  7. Console.Write("{0}, ",array[i]);
  8. }
  9. // БЫСТРАЯ СОРТИРОВКА (СОРТИРОВКА ХОАРА)
  10. //опрным элементом(pivot) сделаем первый элемента массива
  11. for (int i = 0; ; ) //"бесконечный" цикл. Выход сделан с помощью break;
  12. {
  13. //сравниваем элементы массива
  14. if (array[i] >= array[r])
  15. {
  16. //меняем местами
  17. save = array[i];
  18. array[i] = array[r];
  19. array[r] = save;
  20. //--------------
  21. i++;
  22. for (; ; i++)//"бесконечный" цикл. Выход сделан с помощью break;
  23. {
  24. //сравниваем элементы массива
  25. if (array[i] > array[r])
  26. {
  27. //меняем местами
  28. save = array[i];
  29. array[i] = array[r];
  30. array[r] = save;
  31. //--------------
  32. r--;
  33. break; //выходим из внутреннего цикла
  34. }
  35. }
  36. }
  37. else { r--; }
  38. //если элементы "встретились", тогда выходим
  39. if (array[i] == array[r])
  40. {
  41. break;
  42. }
  43. }
  44. //вывод отсортированного на "половину" массива
  45. Console.WriteLine("\n\nОтсортированный на "половину" массив:");
  46. for (int i = 0; i < array.Length; i++)
  47. {
  48. Console.Write("{0}, ", array[i]);
  49. }
  50. //задержка консоли
  51. 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
Листинг программы
  1. andrew@debppc:~/workspace/c_diez/numbers$ gmcs QuickSort.cs
  2. andrew@debppc:~/workspace/c_diez/numbers$ ./QuickSort.exe
  3. Unsorted
  4. 3 9 4 6 4 1 2 3 2 8 7 7
  5. Sorted
  6. 1 2 2 3 3 4 4 6 7 7 8 9
  7. andrew@debppc:~/workspace/c_diez/numbers$

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут