-(void)main:(NSMutableArray*)srcArray{ NSMutableArray* tempArray=[[NSMutableArray alloc] init]; [self main:srcArray tempArray:tempArray left:0 right:(int)([srcArray count]-1)]; } -(void)main:(NSMutableArray*)srcArray tempArray:(NSMutableArray*)tempArray left:(int)left right:(int)right{ if (left<right) { int middle=(left+right)/2; [self main:srcArray tempArray:tempArray left:left right:middle]; [self main:srcArray tempArray:tempArray left:middle+1 right:right]; [self merger:tempArray srcArray:srcArray leftStart:left leftEnd:middle rightStart:middle+1 rightEnd:right]; } } -(void)merger:(NSMutableArray*) tempArray srcArray:(NSMutableArray*)srcArray leftStart:(int)leftStart leftEnd:(int)leftEnd rightStart:(int)rightStart rightEnd:(int)rightEnd{ int index=leftStart; int srcLeftStart=leftStart; while (leftStart<=leftEnd&&rightStart<=rightEnd) { if ([srcArray[leftStart] intValue]<[srcArray[rightStart] intValue]) { tempArray[index++]=srcArray[leftStart++]; }else{ tempArray[index++]=srcArray[rightStart++]; } } while (leftStart<=leftEnd) { tempArray[index++]=srcArray[leftStart++]; } while (rightStart<=rightEnd) { tempArray[index++]=srcArray[rightStart++]; } for (int i=srcLeftStart; i<=rightEnd; i++) { srcArray[i]=tempArray[i]; } }