Перейти к содержанию

Вопрос->Списки


Рекомендуемые сообщения

Приветствую! Впервые начал работать со списками и имею проблемку. Суть программы - сортировка списка простым однократным слиянием.

Вопрос в следующем. Правильно ли я присвоил очередное значение двумерного массива элементу списка.

#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;
}
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...