#include <stdio.h> 
#include <locale.h> 
#include <stdlib.h> 
 
struct  musica { 
	char  nome[ 100 ] ; 
	char  estilo[ 100 ] ; 
	int  rank; 
} ; 
 
typedef  struct  musica Musica; 
 
int  particao( Musica * musicas[ ] ,  int  baixo,  int  alto) { 
    Musica * pivot =  musicas[ baixo] ,  * temp; 
    int  i =  baixo -  1 ,  j =  alto +  1 ; 
 
    while  ( 1 ) { 
        do  {  i =  i +  1 ;  }  while  ( musicas[ i] -> rank <  pivot-> rank) ; 
        do  {  j =  j -  1 ;  }  while  ( musicas[ j] -> rank >  pivot-> rank) ; 
 
        if  ( i >=  j)  return  j; 
 
 
        temp =  musicas[ i] ; 
        musicas[ i]  =  musicas[ j] ; 
        musicas[ j]  =  temp; 
    } 
} 
 
void  quicksort( Musica * musicas[ ] ,  int  baixo,  int  alto) { 
    if  ( baixo <  alto) { 
        int  p =  particao( musicas,  baixo,  alto) ; 
        quicksort( musicas,  baixo,  p) ; 
        quicksort( musicas,  p+ 1 ,  alto) ; 
    } 
} 
 
int  main ( void )  { 
	int  i, j; 
	Musica * a[ 8 ] ; 
 
 
	for  ( i= 0 ;  i< 4 ;  i++ )  { 
        a
[ i
]  =  malloc ( sizeof ( Musica
) ) ;  
 
		printf   ( "Ranking da música: " ) ;  		scanf   ( "%d" ,& ( a
[ i
] -> rank
) ) ;   
 
	} 
//RANKING DIGITADO DESORDENADO 
	for  ( i= 0 ;  i< 4 ;  i++ )  { 
		printf   ( "RANK %d\t %s\t %s\t \n " ,  a
[ i
] -> rank
,  a
[ i
] -> nome
,  a
[ i
] -> estilo
) ;  	} 
    /* 
	Musica *temp; 
 
	for (i=0; i<4; i++) { 
		for (j=i+1; j<4; j++) { 
			if (a[i]->rank > a[j]->rank) { 
                temp = a[i]; 
                a[i] = a[j]; 
                a[j] = temp; 
			} 
		} 
	} 
	*/ 
    quicksort( a,  0 ,  3 ) ; 
 
	//RANKING ORDEM 
	for  ( i= 0 ;  i< 4 ;  i++ )  { 
		printf   ( "RANK %d\t %s\t %s\t \n " ,  a
[ i
] -> rank
,  a
[ i
] -> nome
,  a
[ i
] -> estilo
) ;  	} 
 
	return  0 ; 
} 
 
				I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxsb2NhbGUuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKc3RydWN0IG11c2ljYSB7CgljaGFyIG5vbWVbMTAwXTsKCWNoYXIgZXN0aWxvWzEwMF07CglpbnQgcmFuazsKfTsKCnR5cGVkZWYgc3RydWN0IG11c2ljYSBNdXNpY2E7CgppbnQgcGFydGljYW8oTXVzaWNhICptdXNpY2FzW10sIGludCBiYWl4bywgaW50IGFsdG8pewogICAgTXVzaWNhICpwaXZvdCA9IG11c2ljYXNbYmFpeG9dLCAqdGVtcDsKICAgIGludCBpID0gYmFpeG8gLSAxLCBqID0gYWx0byArIDE7CgogICAgd2hpbGUgKDEpewogICAgICAgIGRvIHsgaSA9IGkgKyAxOyB9IHdoaWxlIChtdXNpY2FzW2ldLT5yYW5rIDwgcGl2b3QtPnJhbmspOwogICAgICAgIGRvIHsgaiA9IGogLSAxOyB9IHdoaWxlIChtdXNpY2FzW2pdLT5yYW5rID4gcGl2b3QtPnJhbmspOwoKICAgICAgICBpZiAoaSA+PSBqKSByZXR1cm4gajsKCgogICAgICAgIHRlbXAgPSBtdXNpY2FzW2ldOwogICAgICAgIG11c2ljYXNbaV0gPSBtdXNpY2FzW2pdOwogICAgICAgIG11c2ljYXNbal0gPSB0ZW1wOwogICAgfQp9Cgp2b2lkIHF1aWNrc29ydChNdXNpY2EgKm11c2ljYXNbXSwgaW50IGJhaXhvLCBpbnQgYWx0byl7CiAgICBpZiAoYmFpeG8gPCBhbHRvKXsKICAgICAgICBpbnQgcCA9IHBhcnRpY2FvKG11c2ljYXMsIGJhaXhvLCBhbHRvKTsKICAgICAgICBxdWlja3NvcnQobXVzaWNhcywgYmFpeG8sIHApOwogICAgICAgIHF1aWNrc29ydChtdXNpY2FzLCBwKzEsIGFsdG8pOwogICAgfQp9CgppbnQgbWFpbiAodm9pZCkgewoJaW50IGksajsKCU11c2ljYSAqYVs4XTsKCglzZXRsb2NhbGUoTENfQUxMLCAiUG9ydHVndWVzZSIpOwoKCWZvciAoaT0wOyBpPDQ7IGkrKykgewogICAgICAgIGFbaV0gPSBtYWxsb2Moc2l6ZW9mKE11c2ljYSkpOwoJCXByaW50ZiAoIk5vbWUgZGEgbcO6c2ljYTogIik7CgkJZ2V0cyAoYVtpXS0+bm9tZSk7CgoJCXByaW50ZiAoIkVzdGlsbyBtdXNpY2FsOiAiKTsKCQlnZXRzIChhW2ldLT5lc3RpbG8pOwoKCQlwcmludGYgKCJSYW5raW5nIGRhIG3DunNpY2E6ICIpOwoJCXNjYW5mICgiJWQiLCYoYVtpXS0+cmFuaykpOwoKCQlwcmludGYgKCJcblxuIik7CgoJCWdldGNoYXIoKTsKCX0KLy9SQU5LSU5HIERJR0lUQURPIERFU09SREVOQURPCglmb3IgKGk9MDsgaTw0OyBpKyspIHsKCQlwcmludGYgKCJSQU5LICVkXHQlc1x0JXNcdFxuIiwgYVtpXS0+cmFuaywgYVtpXS0+bm9tZSwgYVtpXS0+ZXN0aWxvKTsKCX0KICAgIC8qCglNdXNpY2EgKnRlbXA7CgoJZm9yIChpPTA7IGk8NDsgaSsrKSB7CgkJZm9yIChqPWkrMTsgajw0OyBqKyspIHsKCQkJaWYgKGFbaV0tPnJhbmsgPiBhW2pdLT5yYW5rKSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gYVtpXTsKICAgICAgICAgICAgICAgIGFbaV0gPSBhW2pdOwogICAgICAgICAgICAgICAgYVtqXSA9IHRlbXA7CgkJCX0KCQl9Cgl9CgkqLwogICAgcXVpY2tzb3J0KGEsIDAsIDMpOwoKCXByaW50ZiAoIlxuIik7CgkvL1JBTktJTkcgT1JERU0KCWZvciAoaT0wOyBpPDQ7IGkrKykgewoJCXByaW50ZiAoIlJBTksgJWRcdCVzXHQlc1x0XG4iLCBhW2ldLT5yYW5rLCBhW2ldLT5ub21lLCBhW2ldLT5lc3RpbG8pOwoJfQoKCXJldHVybiAwOwp9