fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void qsort (int a[], int lef, int rit);
  5.  
  6. int main()
  7. {
  8. int a[]={5,10,7,6,3,9,4,8,12};
  9. for (int i=0;i<9;i++) cout<< a[i]<<" "; cout<< endl;
  10. qsort (a, 0, 8);
  11. for (int i=0;i<9;i++) cout<< a[i]<<" "; cout<< endl;
  12. return 0;
  13. }
  14.  
  15. void qsort (int a[], int lef, int rit)
  16. {
  17. int ir, rm, buf; // ir – для индекса среднего элемента
  18. // текущей части массива.
  19. // rm – для значения среднего
  20. // элемента текущего массива.
  21. // buf – для промежуточных значений
  22. // обрабатываемой информации.
  23. int l1, r1; // l1 – для индекса элемента, который
  24. // расположен левее и
  25. // больше среднего.
  26. // r1 – для индекса элемента, который
  27. // расположен правее и
  28. // меньше среднего.
  29. int i; // i – для управляющего параметра цикла.
  30. l1 = lef; // Определяем начальный индекс текущей
  31. // части массива.
  32. r1 = rit; // Определяем конечный индекс текущего
  33. // массива.
  34. ir = (l1+r1)/2; // Определяем индекс среднего элемента
  35. // текущей части массива.
  36. rm = a[ir]; // В rm пересылаем значение среднего
  37. // элемента текущего массива.
  38. do // Цикл для перебора элементов, которые
  39. // находятся левее и правее среднего
  40. // элемента текущей части массива.
  41. {
  42. while ( a[l1] < rm ) l1++; // Находим 1-й элемент, который лежит
  43. // слева и больше среднего элемента.
  44. // Индекс этого элемента фиксируется
  45. // в переменной l1.
  46. while ( a[r1] > rm ) r1--; // Находим 1-й элемент, который лежит
  47. // справа и больше среднего элемента.
  48. // Индекс этого элемента фиксируется
  49. // в переменной r1.
  50. if ( l1 <= r1 ) // Начало перестановки элементов
  51. // массива. Меньший относительно
  52. // среднего переставляем в позицию l1,
  53. // а больший относительно среднего
  54. // переставляем в позицию r1 и директивами
  55. // l1++; и r1++; переходим к рассмотрению
  56. // следующих элементов, расположенных
  57. // соответственно левее и правее среднего элемента.
  58. {
  59. // Переставляем элементы массива.
  60. buf = a[l1];
  61. a[l1] = a[r1];
  62. a[r1] = buf;
  63. l1++;
  64. r1--;
  65. } // Конец перестановки элементов массива.
  66. }
  67. while ( r1 > l1 );
  68. }
  69.  
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
5 10 7 6 3 9 4 8 12 
3 10 7 6 5 9 4 8 12