Page 2 - А.Ф. Деон - D-ПОСЛЕДОВАТЕЛЬНОСТИ В БЫСТРОЙ СОРТИРОВКЕ ХОАРА

#
include
<
iostream
>
using namespace std;
#
include
<
iomanip
>
//
setw
template
<
typename Type
>
int inline HoarePosPrint( Type* const a,int left,int right )
{
Type v = a[right];
//
значение разделяющего элемента
int i = left;
//
начало поиска слева
int j = right - 1;
//
начало поиска справа
int m = j;
//
рабочий индекс
Type r;
//
рабочая переменная
while( true )
{
while( a[i]
<
v &&i
<
m ) ++i;
//
меньший элемент
while( v
<
a[j] && j
>
left ) –j;
//
больший элемент
cout
<<
"
i = "
<<
i
<<
"
j = "
<<
j
<<
endl;
if(i
>
= j ) break;
//
обмен не нужен
if( a[i] == a[j] ) break;
//
обмен не нужен
r = a[i];
//
обмен a[i] и a[j]
a[i] = a[j];
a[j] = r;
for(int k = left; k
<
= right; k++ )
cout
<<
setw (4)
<<
a[k];
cout
<<
endl;
}
if( a[i]
>
v )
//
обмен разделяющего элемента
{
r = a[i];
a[i] = v;
a[right] = r;
}
return i;
//
позиция разделяющего элемента
}
//
voidmain()
{
constint n = 6;
//
количество элементов в массиве
int a[n] = { 20, 50, 10, 30, 60, 40 };
//
массив целых чисел
for(inti = 0; i
<
n; i++ )
cout
<<
setw (4)
<<
a[i];
cout
<<
endl;
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2012
93