Сортировка двумерных массивов
Отсортировать элементы двумерного массива по элементам второй строки. Исходный массив. Результат 1 2 3 4 5 5 2 4 3 1 9 3 7 3 1 1 3 3 7 9 6 7 8 9 1 1 7 9 8 6 От сортировки одномерного массива этот случай отличается только тем, что переставлять нужно не два сравниваемых элемента, а два столбца: for i = 1 to n – 1 for j = i+1 to n if a (2, i) > a (2, j) then for k = 1 to n r = a (k, i): a [k, i] = a[k, j]: a [k, j] =r next ‘Сортировка массивов ‘ 1. Вставками ‘ 2. Обменом ‘ 3. Выбором ‘ 4. Фон Неймана (Слияние двух отсортированных массивов) sub myprint for i=1 to n for j=1 to n print mas%(i,j); next next end sub sub mynext j=j+1 if j=n+1 then j=1: i=i+1 end sub sub last j=j-1 if j=0 then j=n: i=i-1 end sub Rem sor1 const n=4 dim mas%(1 to n,1 to n) defint buf,l,i,j,a,c,nextmas,quit cls for i=1 to n for j=1 to n mas%(i,j)=int(rnd*9) next next print; i=1: j=1 for i=2 to (n*n) mynext: buf=mas%(i,j): a=i: c=j last: quit:=1 while (buf<mas%(i,j) and (quit=1) nextmas:=mas%(i,j) mas%(i,j)=buf mynext: mas%(i,j)=nextmas: last if j=0 then quit:=0 wend i=a: j=c next myprint end Результаты работы:
Текст программы: sub myprint for i=1 to n for j=1 to n print mas%(i,j); next next end sub
sub mynext j=j+1 if j=n+1 then j=1: i=i+1 end sub
sub last j=j-1 if j=0 then j=n: i=i-1 end sub
rem sor2 const n=4 dim mas%(1 to n,1 to n) defint buf,l,units,i,j,nextmas,quit cls units:=n*n; for i=1 to n for j=1 to n mas%(i,j)=int(rnd*9) next next myprint do i=1: j=1 quit=1 units=units-1 for l=1 to units mynext: nextmas=mas%(i,j): last if mas%(i,j)>nextmas then buf=mas%(i,j): mas%(i,j)=nextmas: mynext: mas%(i,j)=buf: quit=0 else mynext next until (quit=0) or (units=1) myprint Результаты работы:
sub myprint for i=1 to n for j=1 to n print mas(i,j); next next end sub
rem sor3 const n=4 dim mas(1 to n,1 to n) defint min,buf,l,l1,i,j,i1,j1,a,c cls for i=1 to n for j=1 to n mas(I,,j)=int(rnd*9) next next myprint a=1: c=1: i=1: j=1 for l=1 to (n*n) mi=mas(a,c): i=a: j=c: i1=a: j1=c for l1=1 to (n*n+1)-l if min>mas(i1,,j1) then min:=mas(i1,,j1): i=i1: j=j1 j1=j1+1: if j1=(n+1) then j1=1: i1=i1+1 next buf=mas(i,j) mas(i,j)=mas(a,c) mas(a,c)=buf c=c+1: if c=(n+1) then c=1: a=a+1 next end Результаты работы:
Текст программы: sub mynext(t) if t=1 then j=j+1: if j=n+1 then j=1: i=i+1 if t=2 then j1=j1+1: if j1=n+1 then j1=1: i1=i1+1 if t=3 then c=c+1: if c=n+1 then c=1: a=a+1 end sub sub myprint(pr() for a=1 to n for c=1 to n print pr(a,c); next next end sub rem sor4 ‘Основная програма const n=4 dim mas(1 to n,1 to n) dim mas1(1 to n,1 to n) dim mas2(1 to n,1 to n) dim mas3(1 to n,1 to n) defint buf,i,j,i1,j1,a,c cls buf=10 for a=1 to n for c=1 to n mas1(a,c)=buf next buf=buf+1 mas2(a,c)=buf buf=buf+1 next myprint(mas1): myprint(mas2) a=1: c=1: i:=1: j=1: i1=1: j1=1 while (i<>n+1)and(i1<>n+1) if mas1(I,,j)<mas2(i1,,j1) then mas3(a,c)=mas1(I,,j): mynext(1) else mas3(a,c)=mas2(i1,,j1) end if mynext(3) wend if i=n+1 then while not(i1=n+1) mas3(a,c)=mas2(i1,,j1) mynext(3): mynext(2) wend if i1=n+1 then while not(i=n+1) mas3(a,c)=mas2(I,,j) mynext(3): mynext(1) wend for a=1 to n*2 for c=1 to n print mas3(a,c); next next end Результаты работы:
|