排序我試圖實現的目標-C歸併排序。合併目標C
這是一個類似的問題在下面的鏈接要求,沒有發現它回答說,因此創建一個新的問題。
這是我已經試過了,
-(NSArray *)mergeSort:(NSArray *)unsortedArray {
if ([unsortedArray count] < 2)
return unsortedArray;
long mid = [unsortedArray count]/2;
NSRange left = NSMakeRange(0, mid);
NSRange right = NSMakeRange(mid, [unsortedArray count] - mid);
NSArray *rightArray = [unsortedArray subarrayWithRange:right];
NSArray *leftArray = [unsortedArray subarrayWithRange:left];
NSArray *resultArray = [self merge:leftArray andRight:rightArray];
return resultArray;
}
-(NSArray *)merge:(NSArray *)leftArray andRight:(NSArray *)rightArray {
NSMutableArray *result = [NSMutableArray array];
int right = 0;
int left = 0;
while (left < [leftArray count] && right < [rightArray count]) {
NSComparisonResult comparisonResult = [leftArray[left] compare:rightArray[right]];
if (comparisonResult != NSOrderedDescending) {
[result addObject:[leftArray objectAtIndex:left++]];
} else {
[result addObject:[rightArray objectAtIndex:right++]];
}
/*if ([[leftArray objectAtIndex:left] intValue] < [[rightArray objectAtIndex:right] intValue]) {
[result addObject:[leftArray objectAtIndex:left++]];
//left++;
} else {
[result addObject:[rightArray objectAtIndex:right++]];
//right++;
}*/
}
NSRange leftRange = NSMakeRange(left, [leftArray count] - left);
NSRange rightRange = NSMakeRange(right, [rightArray count] - right);
NSArray * newRight = [rightArray subarrayWithRange:rightRange];
NSArray * newLeft = [leftArray subarrayWithRange:leftRange];
newLeft = [result arrayByAddingObjectsFromArray:newLeft];
return [newLeft arrayByAddingObjectsFromArray:newRight];
}
請讓我知道如果任何人有合併排序任何其他方法。
你的問題是什麼?你在問題中發佈的代碼有問題嗎?如果是這樣,究竟是什麼?請明確點。 – rmaddy
@rmaddy:對不起沒有說清楚,當我輸入用下面的陣列我沒有收到以排序格式輸出上述代碼中, 輸入是:101,201,301,121,11,123,21,14,32,76,89,987,65 輸出我得到:合併排序的數組:(21,14,32,76,89,101,201,301,121,11,123,987,65) –
我可以問那種撤併你想要什麼?合併線在數組中沒有相同的值/元素? – 0yeoj