level 1
chenzhiog
楼主
void mergeSort(PlaylistNodePtr *sPtr,char c)
{
void split(PlaylistNodePtr *sPtr,PlaylistNodePtr *sPtr1);
void merge(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char c);
if(*sPtr!=NULL){
PlaylistNodePtr headPtr1;
split(sPtr,&headPtr1);
mergeSort(sPtr,c);
mergeSort(&headPtr1,c);
merge(sPtr,&headPtr1,c);
}
}
void split(PlaylistNodePtr *sPtr,PlaylistNodePtr *sPtr1)
{
long long unsigned int length = Length(*sPtr);
long long unsigned int i=1;
PlaylistNodePtr tempPtr;
while(i<=length/2){
tempPtr=removeSong(sPtr,1);
tempPtr->nextPtr=*sPtr1;
*sPtr1=tempPtr;
i++;
}
}
void merge(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char c)
{
PlaylistNodePtr min(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char choice);
PlaylistNodePtr headPtr=NULL,tailPtr=NULL;//pointers to merged list
while((*sPtr1!=NULL)&(*sPtr2!=NULL)){
addSong(&headPtr,&tailPtr,min(sPtr1,sPtr2,c));
}
if(*sPtr1==NULL){
tailPtr->nextPtr=*sPtr2;//connect list2 to the merged list
}
else{
tailPtr->nextPtr=*sPtr1;//connect list1 to the merged list
}
*sPtr1=headPtr;
}
PlaylistNodePtr min(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char choice)
{
const char *readData(PlaylistNodePtr sPtr,char choice);//read the data of a SongNode according to the choice.
if(strcmp(readData(*sPtr1,choice),readData(*sPtr2,choice))>=0){
return removeSong(sPtr2,1);
}
else{
return removeSong(sPtr1,1);
}
}
const char *readData(PlaylistNodePtr sPtr,char choice)
{
if(choice=='t'){
return sPtr->title;
}
else if(choice=='a'){
return sPtr->artist;
}
else{
return sPtr->year;
}
}
2013年12月15日 06点12分
1
{
void split(PlaylistNodePtr *sPtr,PlaylistNodePtr *sPtr1);
void merge(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char c);
if(*sPtr!=NULL){
PlaylistNodePtr headPtr1;
split(sPtr,&headPtr1);
mergeSort(sPtr,c);
mergeSort(&headPtr1,c);
merge(sPtr,&headPtr1,c);
}
}
void split(PlaylistNodePtr *sPtr,PlaylistNodePtr *sPtr1)
{
long long unsigned int length = Length(*sPtr);
long long unsigned int i=1;
PlaylistNodePtr tempPtr;
while(i<=length/2){
tempPtr=removeSong(sPtr,1);
tempPtr->nextPtr=*sPtr1;
*sPtr1=tempPtr;
i++;
}
}
void merge(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char c)
{
PlaylistNodePtr min(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char choice);
PlaylistNodePtr headPtr=NULL,tailPtr=NULL;//pointers to merged list
while((*sPtr1!=NULL)&(*sPtr2!=NULL)){
addSong(&headPtr,&tailPtr,min(sPtr1,sPtr2,c));
}
if(*sPtr1==NULL){
tailPtr->nextPtr=*sPtr2;//connect list2 to the merged list
}
else{
tailPtr->nextPtr=*sPtr1;//connect list1 to the merged list
}
*sPtr1=headPtr;
}
PlaylistNodePtr min(PlaylistNodePtr *sPtr1,PlaylistNodePtr *sPtr2,char choice)
{
const char *readData(PlaylistNodePtr sPtr,char choice);//read the data of a SongNode according to the choice.
if(strcmp(readData(*sPtr1,choice),readData(*sPtr2,choice))>=0){
return removeSong(sPtr2,1);
}
else{
return removeSong(sPtr1,1);
}
}
const char *readData(PlaylistNodePtr sPtr,char choice)
{
if(choice=='t'){
return sPtr->title;
}
else if(choice=='a'){
return sPtr->artist;
}
else{
return sPtr->year;
}
}