У меня проблемы с созданием раздела для заданных входов.Я попробовал две вещи, первая закомментирована, и это просто некоторый базовый псевдокод для алгоритма разбиения, а вторая - то, что я интерпретировал из заметок класса.Прежде всего, основная функция в порядке, которая была дана нам.Мне нужно только закончить кодирование функции раздела.Все, что прокомментировано в функции разделения, - моя первая попытка, все, что не прокомментировано, - моя вторая попытка.
Вот некоторые входные данные, которые мы должны проверить вместе с правильными результатами:
- 12 3 4 5 6 7 пивот 4;элементы меньше точки поворота находятся в левой части
- 8 7 6 5 4 3 2 1 точка поворота 5;элементы меньше точки поворота находятся в левой части
- 5 1 4 3 6 7 8 2 точка поворота равна 3;элементы меньше точки поворота находятся в левой части
- 4 3 1 2 7 5 точка разворота 1;левая часть пуста
2 6 8 4 1 7 пивот равен 8;правая часть пуста
int partition(int a[], int first, int last) {
/* int pivot = a[last / 2];
//cout << pivot << endl;
int i = (first - 1);
for (int j = first; j <= last; j++) {
if (a[j] < pivot) {
i++;
//cout << pivot << endl << i << endl << j << endl;
swap(a[i], a[j]);
}
}
cout << pivot << endl << i << endl << first << endl << last << endl;
//swap(a[i + 1], a[last]);
return (i + 1);
}*/
swap(a[first],a[(first+last)/2]);
int pivot = a[first];
int i = a[first];
int j = a[last];
while (i <= j)
{
if (pivot > a[i])
{i++;}
if (pivot < a[j])
{j--;}
if (i <= j)
{swap(a[i],a[j]);}
}
swap(pivot, a[j]);
return i;
}
int main()
{
int x; // number of elements
int nums[10];
cout << "How many elements would you like to enter into the array? (must
be less than 10): ";
cin >> x;
cout << "Enter the elements one per line" << endl;
for (int i = 0; i < x; i++)
{ cin >> nums[i]; }
int pivot_index = partition(nums, 0, x-1);
cout << "The array was partitioned" << endl;
// display up to the pivot without endl
for (int i = 0; i < pivot_index; i++)
cout << nums[i] << " ";
// display the pivot
cout << "| " << nums[pivot_index] << " | " ;
// display from the pivot without endl
for (int i = pivot_index+1; i < x; i++)
cout << nums[i] << " ";
cout << endl;
}