- (
void
)mergeSortArray:(
NSMutableArray
*)array lowIndex:(
NSInteger
)lowIndex highIndex:(
NSInteger
)highIndex
{
if (lowIndex >= highIndex) {
return ;
}
NSInteger midIndex = lowIndex + (highIndex - lowIndex) / 2 ;
[ self mergeSortArray :array lowIndex :lowIndex highIndex :midIndex];
[ self mergeSortArray :array lowIndex :midIndex + 1 highIndex :highIndex];
[ self mergeArray :array lowIndex :lowIndex midIndex :midIndex highIndex :highIndex];
}
- ( void )mergeArray:( NSMutableArray *)array lowIndex:( NSInteger )lowIndex midIndex:( NSInteger )midIndex highIndex:( NSInteger )highIndex
{
for ( NSInteger i = lowIndex; i <= highIndex; i ++) {
self . tempArr [i] = array[i];
}
NSInteger k = lowIndex;
NSInteger l = midIndex + 1 ;
for ( NSInteger j = lowIndex; j <= highIndex; j ++) {
if (l > highIndex) {
array[j] = self . tempArr [k];
k++;
} else if (k > midIndex)
{
array[j] = self . tempArr [l];
l++;
} else if ([ self . tempArr [k] integerValue ] > [ self . tempArr [l] integerValue ])
{
array[j] = self . tempArr [l];
l++;
} else
{
array[j] = self . tempArr [k];
k++;
}
}
{
if (lowIndex >= highIndex) {
return ;
}
NSInteger midIndex = lowIndex + (highIndex - lowIndex) / 2 ;
[ self mergeSortArray :array lowIndex :lowIndex highIndex :midIndex];
[ self mergeSortArray :array lowIndex :midIndex + 1 highIndex :highIndex];
[ self mergeArray :array lowIndex :lowIndex midIndex :midIndex highIndex :highIndex];
}
- ( void )mergeArray:( NSMutableArray *)array lowIndex:( NSInteger )lowIndex midIndex:( NSInteger )midIndex highIndex:( NSInteger )highIndex
{
for ( NSInteger i = lowIndex; i <= highIndex; i ++) {
self . tempArr [i] = array[i];
}
NSInteger k = lowIndex;
NSInteger l = midIndex + 1 ;
for ( NSInteger j = lowIndex; j <= highIndex; j ++) {
if (l > highIndex) {
array[j] = self . tempArr [k];
k++;
} else if (k > midIndex)
{
array[j] = self . tempArr [l];
l++;
} else if ([ self . tempArr [k] integerValue ] > [ self . tempArr [l] integerValue ])
{
array[j] = self . tempArr [l];
l++;
} else
{
array[j] = self . tempArr [k];
k++;
}
}
}