Nostradamus Опубликовано 9 декабря, 2006 Жалоба Поделиться Опубликовано 9 декабря, 2006 Приветствую! Впервые начал работать со списками и имею проблемку. Суть программы - сортировка списка простым однократным слиянием. Вопрос в следующем. Правильно ли я присвоил очередное значение двумерного массива элементу списка. #include <stdio.h> #include <conio.h> #include <string.h> struct list // определение структурированного типа { int val; // значение элемента list *next; // указатель }A[16],*ph,*p,*res; void sort(int A[], int n){ int i,found; // Количество сравнений do { // Повторять просмотр... found =0; for (i=0; i<n-1; i++) if (A > A[i+1]) { // Сравнить соседей int cc = A; A=A[i+1]; A[i+1]=cc; found++; // Переставить соседей } } while(found !=0); } //...пока есть перестановки #define N 1 // Количество массивов list *big_sort(list *A1, int n){ list *pph=NULL; int j=0; int i,m = n/N; int **B = new int*[N]; for(int s =0; s < N; s++) B = new int[n/N]; // Размерность массивов for (i=0; i<n; i++) {A1=pph; B[i/m][i%m]=A1->val; A1=A1->next;} // Распределение 1 ВОПРОС for (i=0; i<N; i++) sort(B,n/N); // Сортировка частей for (i=0; i<n; i++){ // Слияние for ( int k=0, j=0; j<N; j++) // Индекс строки с минимальным if (B[j][0] < B[k][0]) k=j; // B[k][0] A1=pph; // 2 ВОПРОС A1->val = B[k][0]; A1=A1->next; // Слияние элемента for (j=1; j<m; j++) B[k][j-1]=B[k] [j]; // Сдвиг сливаемой строки B[k][m-1]=10000; // Запись ограничителя } return A1; } void main() { clrscr(); int i=0,m; p=new list; ph=p; for (i=0; i< 16; i++) { // размещенных в статическом массиве p->val=16-i; p->next=new list; p=p->next; } p=ph; for(m=0;m<16;m++){printf("%i ",p->val);p=p->next;} p=ph; res=big_sort(p,16); printf("\n"); for(i=0;i<16;i++) {printf("%d ",p->val); p=p->next; } getch(); return; } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.