Консультация № 132116
14.04.2008, 10:45
0.00 руб.
0 3 3
Здравствуйте! Решите пожалуйста задачу: Дана матрица А [n][n], упорядочить по возрастанию элементы главной диагонали.

Обсуждение

Неизвестный
14.04.2008, 14:07
общий
это ответ
Здравствуйте, Иванов, Андрей, Сергеевич!
Вот код, компилировал в VC 6.0

Метод сортировки - вставка погружением.

Приложение:
#include <iostream>#include <time.h>using namespace std;void main(){ srand(time(NULL)); int i,j,k,s; const int n=8; int m[n][n]; for (i=0;i<n;i++) //заполняем матрицу случайными числами for (j=0;j<n;j++) { m[i][j]=rand()%20; //0-20 if(j%n==0) cout<<endl; cout<<m[i][j]<< "\t"; } for (i=1;i<n;i++) for (k=i;k!=0 && m[k][k] < m[k-1][k-1];k--) //пока не достигнем дна или меньшего себя { s=m[k][k];m[k][k]=m[k-1][k-1];m[k-1][k-1]=s; //"три стакана" } cout<<endl<<endl<<endl;//вывод на экран for (i=0;i<n;i++) for (j=0;j<n;j++) { if(j%n==0) cout<<endl; cout<<m[i][j]<< "\t"; }}
Неизвестный
14.04.2008, 21:45
общий
это ответ
Здравствуйте, Иванов, Андрей, Сергеевич!
Решение в приложение. Сортировка методом пузырька. Будут вопросы, пишите в мини-форум.

Приложение:
#include <iostream.h>#include <bios.h>#include <conio.h>#include <time.h>#include <stdlib.h>int main(){ int **A; int N, i, j, r; clrscr();//вводим размерность и генерируем массив cout << "Введите размерность матрицы" << endl; cin >> N; A = new int *[N]; for (i = 0; i < N; i++) A[i] = new int [N]; srand(time(NULL)); for (i = 0; i < N; i++) for (j = 0; j < N; j++) A[i][j] = rand()%100;//вывод сгенерированного массива cout << "Сгенерированный массив:" << endl; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) cout << A[i][j] << "\t"; cout << "\n"; }//сортировка элементов главной диагонали for (i = 0; i < N-1; i++) for (j = 0; j < N-1; j++) if (A[j][j] > A[j+1][j+1]) { r = A[j][j]; A[j][j] = A[j+1][j+1]; A[j+1][j+1] = r; }//вывод результата cout << "Преобразованный массив:" << endl; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) cout << A[i][j] << "\t"; cout << "\n"; } bioskey(0); delete []A; return 0;}
Неизвестный
15.04.2008, 03:08
общий
это ответ
Здравствуйте, Иванов, Андрей, Сергеевич!
Предложу наиболее простой для понимания способ сортировки выбором. <a href=http://algolist.manual.ru/sort/select_sort.php>Описание</a> сортировки выбором (©<a href=<a href=http://algolist.manual.ru>algolist.manual.ru</a>). Вариант реализации этого метода для вашей задачи смотрите в приложении.

Приложение:
#include <stdio.h>#include <stdlib.h>#include <time.h>int main(int argc, char* argv[]) { const int n = 6; int A[n][n]; int i, j; int random_limit = 100; srand((unsigned) time(NULL)); for(i=0; i<n; i++) for(j=0; j<n; j++) A[i][j] = rand()%random_limit; printf("Initial matrix:\n"); for(i=0; i<n; i++) { for(j=0; j<n; j++) printf("%d\t", A[i][j]); printf("\n"); } for(i=0; i<n-1; i++) { int min_index = i; for(j=i+1; j<n; j++) if(A[j][j] < A[min_index][min_index]) min_index = j; if(min_index != i) { int temp = A[min_index][min_index]; A[min_index][min_index] = A[i][i]; A[i][i] = temp; } } printf("\nMatrix with sorted main diagonal:\n"); for(i=0; i<n; i++) { for(j=0; j<n; j++) printf("%d\t", A[i][j]); printf("\n"); } return 0;}
Форма ответа