webForumDet fria alternativet

Hur göra denna quicksorten generell?

C/C++

4 svar · 207 visningar · startad av mangan

Medlem sedan feb. 2003216 inlägg
Frågan#1

Hej!

Jag har en quicksort i C som jag vill göra generell. Koden som är intressant ser ut på följande sätt:

void quicksort (struct film arr[], int n) {
........
  if ((string_cmp(arr[i].title, arr[0].title)) < 0) { 
      swap(arr,++last, i); // nollställ (restore) pivot
    }

Frågan är nu om man kan få title att hålla en char[ ] så man kan välja vad man ska sortera på. Alltså, kan man ha den som en variabel som i ex. PHP?

if ((string_cmp(arr[i].$variabel, arr[0].$variabel..........
Medlem sedan juni 200010 432 inlägg
#2

Det finns en väldigt generell quicksort i stdlib.h vid namn qsort. Det enda man behöver tillföra för att använda den är en jämförelsefunktion.

Frågan är nu om man kan få title att hålla en char[ ] så man kan välja vad man ska sortera på. Alltså, kan man ha den som en variabel som i ex. PHP?

Duger inte strcmp i string.h?

Medlem sedan feb. 2003216 inlägg
#3

tack för svaret PeW!
Jag får inte använda quicksort i stdlib.h och strcmp gör inte det jag vill exakt.
Jag kanske inte var tillräckligt tydlig i mitt tidigare inlägg så här följer en ny förklaring:

Jag vill kunna skicka in en variabel (char []) till min quicksort som avgör vad det är som sorteringen ska sortera på

Medlem sedan juni 200010 432 inlägg
#4

Och vad är problemet? Ena stunden vill du ha en generell qsort och i andra ska du specifiera? Den som finns i stdlib.h använder voidpekare och jämförelseoperationen man måste lägga in är just för att ge funktionen en chans att veta vad som ska sorteras. Mao är det nog den modellen du vill ha.. men du ska antagligen göra den själv eftersom ni inte fick använda stdlib.h ;)

Medlem sedan feb. 2003216 inlägg
#5

tack för tipsen igen! jag har redan löst problemet

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)