Приветствую! Впервые начал работать со списками и имею проблемку. Суть программы - сортировка списка простым однократным слиянием.
Вопрос в следующем. Правильно ли я присвоил очередное значение двумерного массива элементу списка.
#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;
}