chenzhiog chenzhiog
关注数: 32 粉丝数: 84 发帖数: 4,071 关注贴吧数: 9
我的mergesort为什么老是崩溃阿,求大神指点 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; } }
1 下一页