Здравствуйте пользователи форума... если у кого нибудь есть из старых запасов внешняя сортировка многопутевым слиянием ... помогите пожалуйста ... только её осталось добавить .
ну на всякий имеется код
| Код | #include <iostream.h> #include <conio.h> #include <stdlib.h>
#define MAXNUMBER 10
int base[MAXNUMBER+1], b1[MAXNUMBER+2], b2[MAXNUMBER+2], b3[MAXNUMBER+2], b4[MAXNUMBER+2];
int merges( int *dest, int *f1, int c1, int *f2, int c2) //сливает две последовательности в одну //возвращает число вставленных элементов { int i=0; int t1=0,t2=0; int *tf1,*tf2; while(c1>0||c2>0) { if(c1>0)t1=1; if(c2>0)t2=1; tf1=f1;tf2=f2; do { i++; if(t1&&t2) { if(*(f1)<*(f2)) *(dest++)=*(f1++); else *(dest++)=*(f2++); } else if(t1){ *(dest++)=*(f1++);} else if(t2){ *(dest++)=*(f2++);} if(tf1!=f1) { tf1=f1;if(*(f1)<*(f1-1)) t1=0;} if(tf2!=f2) {tf2=f2;if(*(f2)<*(f2-1)) t2=0; } }while(t1||t2); c1--;c2--; }; return i; } int number_of_serieses() { int *master; master=base; int j=1; for(int i=0;i<MAXNUMBER;i++) { if(*(master)<*(master-1)) j++; master++; } return j; } void split( int * master, int *f1, int *f2, int *f3, int *f4) //разбивает последовательность по подпоследовательностям { int *t1,*t2,*t3,*t4; t1=f1;t2=f2;t3=f3;t4=f4; f1++;f2++;f3++;f4++; int i=1; *(f1++)=*(master++); int j=1,sn=double(number_of_serieses()+1)/4,n=1; sn=sn>0?sn:1; *(t1)=0; *(t2)=0; *(t3)=0; *(t4)=0; do { if(*(master)<*(master-1)) { switch(j) { case 1:*(t1)+=1;n++;break; case 2:*(t2)+=1;n++;break; case 3:*(t3)+=1;n++;break; case 4:*(t4)+=1;n++;break; } if(n>sn) { j=j<4?j+1:j;n=1; } } switch(j) { case 1: *(f1++)=*(master++);break; case 2: *(f2++)=*(master++);break; case 3: *(f3++)=*(master++);break; case 4: *(f4++)=*(master++);break; } } while (++i<MAXNUMBER); *(t1)+= j!=1 ?0:*(t1)+1; *(t2)+= j!=2 ?0:*(t2)+1; *(t3)+= j!=3 ?0:*(t3)+1; *(t4)+= j!=4 ?0:*(t4)+1; *(f1)=0; *(f2)=0; *(f3)=0; *(f4)=0; }
void fillmaster() { randomize(); for(int i=0;i<MAXNUMBER;i++) { cout << i <<":"; cin >> base[i];//=random(10000); } base[i]=0; } void write(int *matrix) { for(int i=0;i<MAXNUMBER;i++) { if (!(i%20)) {cout << "\n----------------------"; getch(); }; cout << "\n[" << i << "]\t"<< *(matrix++); } } void main()
{ clrscr(); fillmaster(); // write(base); getch();
cout<<"\nNumber Series=" << number_of_serieses(); while(number_of_serieses() != 1) { split(base,b1,b2,b3,b4); int shift=merges(base,b1+1,*(b1),b2+1,*(b2)); merges(base+shift,b3+1,*(b3),b4+1,*(b4)); // cout<<"\nNumber Series=" << number_of_serieses(); // getch(); } write(base); getch(); cout<<"\nThe END - - - - - - - - -\n"; }
|
в 2005 ругается на <iostream.h> в 2010 на cout ... |