Я пытаюсь реализовать следующий алгоритм:
предположим, что есть массив a [3] [3], моя цель - выбрать некоторый элемент поворота, например a [1] [1], и создать раздел таким образом, чтобы все элементы меньше a [1] [1] были слева сторона и над элементом поворота, и все большие элементы с правой стороны и под элементом поворота. например рассмотрим следующую матрицу:
6 4 3
8 5 2
1 7 9
один из возможных разделов -
3 4 6
2 5 7
1 8 9
как вы видите, все меньше элементов находятся с левой стороны и над шарниром, называемым 4., а другие с правой стороны и под шарниром как 8.
вот мой код
#include <iostream>
using namespace std;
int main(){
int a[3][3];
for (int i=0;i<3;i++) {
for (int j=0;j<3;j++){
cin>>a[i][j];
}
}
int i=0;
int j=0;
int n=2;
int m=2;
int pivot=a[1][1];
while( m>i && n>j) {
while(a[m][n]>pivot) --m;--n;
while( a[i][j]<pivot) ++i;++j;
int t=a[i][j];
a[i][j]=a[m][n];
a[m][n]=t;
}
for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
но когда я ввел матрицу, указанную выше, я получил неправильный результат
6 5 3
8 4 2
1 7 9
пожалуйста, помогите мне