QuickSort structura lub Sort

0

Potrzebuje posortować strukturę która składa się z typów AnsiString.

chciałem sortować po przez Sort z STL. Problem w tym, że wypełniona struktura znajduje się w Unit1 a to jest Unit2. Niżej podana struktura jest pusta (sprawdzałem przez ShowMessage) a musi tu być bo funkcja compare nie wie co to losuj jeżeli usunę tą strukturę.

struct losuj
       {
         AnsiString imie;
            ...

       };
       losuj dane[10000];

bool compareByLength (const  losuj &a, const losuj &b)
{
    return a.imie < b.imie;
} 

Jeżeli wywołam ją tak to nie posortuje nic bo ta struktura z unit2 jak pisałem jest pusta.

sort(dane, dane + 1000 , compareByLength);

Jeżeli podając parametry odniosę się do tej struktury z Unit1 (wypełnionej)

sort(Form1->dane, Form1->dane + 1000 , compareByLength);  

to dostaje takie coś http://gyazo.com/080aa3b3334e75da306ea49524147c25

Jak to dziadostwo przesortować?

0

A gdzie ta struktura losuj leży. I jak wygląda deklaracja dane?

0

Struktura zadeklarowana jest w pliku unit1.h, używam jej w unit2.cpp do wyszukiwania w w niej danych.
W unit1.cpp mam przycisk który ładuje dane do tej tablicy struktur. I oczywiście to działa, ale w uni2.cpp funkcja porónująca jej nie widzi i muszę od nowa deklarować strukturę co wg mnie jest głupotą, ale nie mam pojeicia jak to rozwiązać.

dane[i].imie=name[im].c_str();
   ...
 
 public:		// User declarations
        __fastcall TForm1(TComponent* Owner);

       struct losuj
       {
         AnsiString imie;
         AnsiString nazwisko;
           .....
  };
       losuj dane[10000];
};

Ewentualnie jak by to wyglądało dla wbudowanej funkcji qsort?

0

Kompilator krzyczy, że dostał TForm1::losuj, a oczekiwał const losuj&. Wygląda jakbyś definiował losuj wewnątrz TForm1.

0
bool compareByLength (const TForm1::losuj &a, const TForm1::losuj &b)

tak to naprawiłem.

Jest może gdzieś opisane jakiego algorytmu używa funkcja sort ?

0

Zależy od implementacji, często jest to chyba jakaś wariacja quicksorta, generalnie masz prawo się spodziewać nlog(n).

0

A czy implementacja nie jest stała? skoro jest to funkcja wbudowana? czy po prostu zależy to od wersji używanej wersji c++?

0

Jeśli standard nie określa to każdy implementuje co chce, byle złożoność była spełniona.

0

yyyy nie rozumiem trochę. Przecież to jest funkcja wbudowana w bibliotekę <algorithm> więc raczej musi mieć jedną implementację?

1

A czy jest jeden kompilator? Kto zabrania różnym implementatorom różne algorytmy stosować?

0

A no tak, faktycznie nie wziąłem po uwagę, że mówimy o różnego rodzaju kompilatorach :) Dzieki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1