Sortiranje¶
Primjer: sortiranje polja stringova tako da se prvi znak u stringu ignorira.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char L[32][32];
int usporedba( char* a, char* b )
{
return strcmp( a+1, b+1 ); //sortiranje ignorirajući
} //prvi znak
main()
{
strcpy( L[0], ".kruska" );
strcpy( L[1], "-jabuka" );
strcpy( L[2], "*limun" );
qsort( L, 3, 32,
(int(*)(const void*,const void*))usporedba );
int i;
for( i=0; i<3; i++ )
printf( "%d %s\n", i, L[i] );
}
0 -jabuka
1 .kruska
2 *limun
|
def usporedba( a, b ):
return cmp(a[1:],b[1:])
L = [".kruska", "-jabuka", "*limun" ]
L.sort( cmp=usporedba )
for i,s in enumerate(L):
print "%d %s" % (i,s)
0 -jabuka
1 .kruska
2 *limun
Pythonskiji način bi bio koristiti funkciju koja generira ključ po kojem će se sortirati: def kljuc( a ):
return a[1:]
L = [".kruska", "-jabuka", "*limun" ]
L.sort( key=kljuc )
for i,s in enumerate(L):
print "%d %s" % (i,s)
0 -jabuka
1 .kruska
2 *limun
|
sorted()
vs. list.sort()
def kljuc( a ): return a[1:] L = [".kruska", "-jabuka", "*limun" ] print sorted(L) print sorted(L, key=kljuc) print sorted(L, reverse=True) print sorted(L, key=kljuc, reverse=True) print L['*limun', '-jabuka', '.kruska'] ['-jabuka', '.kruska', '*limun'] ['.kruska', '-jabuka', '*limun'] ['*limun', '.kruska', '-jabuka'] ['.kruska', '-jabuka', '*limun']
Vidimo da za razliku od metode list.sort()
(vidi tablicu Mutable Sequence Types)
iz prvog primjera,
funkcija sorted()
nije promijenila početnu listu L
. (list.sort()
dakle radi in-place sort, a sorted()
stvara još jednu listu.) Također vidimo kako opcija reverse
može poslužiti za promjenu redoslijeda.
Literatura