ďťż

Ładny brzuch

witam
czy moze ktos mi pokazac sortowanie przez scalanie
na listach.
troche sie zgubilem z tymi listami
z góry dzieki




witam
czy moze ktos mi pokazac  sortowanie przez scalanie
na listach.
troche sie zgubilem z tymi listami
z góry dzieki

moze ee mam taka liste
struct lista
{
int liczba;
lista *next;

};

możę jeszcze inaczej mam taki sobie programik i chciałbym zeby zastosować w nim sortowanie przez scalanie
a oto on:

#include <iostream>
#include <stdlib.h>
#include <conio.h>

using namespace std;

struct T
{
int liczba;
T* nast;
T* poprz;
};

int main()
{
int i;
T* pom;
T* poczatek;
T* koniec;
poczatek=NULL; //ustawienie wskaznikow
koniec=NULL;
for (i=1; i<=10; i++)
{
if (poczatek==NULL)
{
poczatek=new T;
poczatek->liczba=i;
poczatek->nast=NULL;
poczatek->poprz=NULL;
koniec=poczatek;
}
else
{
koniec->nast=new T;
koniec->nast->poprz=koniec;
koniec=koniec->nast;
koniec->liczba=i;
}
}
pom=poczatek;
for (i=1; i<=10; i++)
{
cout<<pom->liczba<<endl;
pom=pom->nast;
}

getch ();
return 0;
}

void MergeSort(const int* aTablica, unsigned uRozmiar,  unsigned uMinIndex = 0,  unsigned uMaxIndex = uRozmiar - 1) {   if (uMinIndex >= uMaxIndex)  return;   unsigned uPunktPodzialu = (uMinIndex + uMaxIndex) / 2;   MergeSort (aTablica, uRozmiar, uMinIndex, uPunktPodzialu);   MergeSort (aTablica, uRozmiar, uPunktPodzialu + 1, uMaxIndex);   unsigned uRozmiarLewej = uPunktPodzialu - uMinIndex + 1;   unsigned uRozmiarPrawej = uMaxIndex - uPunktPodzialu;   int[] aLewa = new int [uRozmiarLewej + 1];   int[] aPrawa = new int [uRozmiarPrawej + 1];   for (unsigned i = 0; i < uRozmiarLewej; ++i)         aLewa[i] = aTablica[uMinIndex + i];   for (unsigned i = 0; i < uRozmiarPrawej; ++i)   aPrawa[i] = aTablica[uPunktPodzialu + 1 + i];   aLewa[uRozmiarLewej] = aPrawa[uRozmiarPrawej] = MAX_INT;   unsigned i = 0, j = 0;   for (unsigned k = uMinIndex; k <= uMaxIndex; ++k)         if (aLewa[i] <= aPrawa[j])         {               aTablica[k] = aLewa[i];               ++i;         }         else         {               aTablica[k] = aPrawa[j];               ++j         }   delete[] aLewa;   delete[] aPrawa; }

Pisałem z głowy ten algorytm więc mogą być błędy. Mam nadzieję że pomogłem :)



dzieki to ja tez mam tylko jak go zastosowac w tym programiku z lista

a domyśl się .. :)

w moim kodzie jest coś takiego jak aLewa i aPrawa. Wystarczy pokombinować:]

heh, a mi sie wydaje, ze Twoj kod sie nie przyda :P przede wszystkim, to co na tablicach robione jest w czasie stalym na listach zajmuje czas liniowy, wiec ten algorytm bedzie mial wieksza zlozonosc niz merge sort

no to jak to zrobic bo mi juz dym uszami idzie

double b[N]; void merge(int n,int k,double t[], double b[]) {  int i=0,j=k,l=0;  while (i<k && j<n)    {if(t[i]<t[j])      b[l++]=t[i++];     else      b[l++]=t[j++];    }  while(i<k)    b[l++]=t[i++];  for(i=0;i<j;i++)    t[i]=b[i];             } void merge_sort(int n, double t[]) {if(n>1)  {int k=n/2;   merge_sort(k,t);   merge_sort(n-k,t+k);   merge(n,k,t,b);   } }

fakt można krócej ... :)

dzieki za pomoc tylko dalej niewiem jak mam to skleic do kupy :-(,

Po pierwsze nie napisze ci całego zadania (musisz sam dojść ;)).
Podpowiedziałem ci tylko na co masz zwracać w moim algorytmie.
I jak będziesz stosował metodę prób i błędów to ci wyjdzie.

no tak tylko o sam algorytm na to sortowanie to najmniejszy kłopot .
moj problem to jak wrzucić ta liste do tego sortowania.
lista to troche co innego niż tablica i tu mam error.

hmmmm............

a moze zrobic tablice obiektow tej struktury

np lista tablic[10];

i oprzeć działanie sortowania na tej tablicy?????
Użytkownik wolferin edytował ten post 23 maj 2005, 21:51
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •