1 // C語言實現 2 3 void mergeSort( int array[], int first, int last) 4 { 5 if (first < last) // 拆分數列中元素只剩下兩個的時候,不再拆分 6 { 7 int mid = (first + last) / 2 ; 8 // 遞歸拆分數組 9 mergeSort(array, first, mid); 10 mergeSort(array, mid + 1 , last); 11 // 歸并兩個數組 12 merge(array, first, mid, last); 13 } 14 } 15 16 void merge( int array[], int first, int mid, int last) 17 { 18 int i = first, j = mid + 1 , k = first; 19 int temp[last + 1 ]; 20 21 // 從兩個數列的第一個開始判斷 22 while (i <= mid && j <= last) 23 if (array[i] <= array[j]) 24 temp[k ++] = array[i ++ ]; 25 else 26 temp[k ++] = array[j ++ ]; 27 28 // 如果有剩余,補充進入數組 29 while (i <= mid) 30 temp[k ++] = array[i ++ ]; 31 while (j <= last) 32 temp[k ++] = array[j ++ ]; 33 34 // 復制數組 35 while (first <= last) 36 { 37 array[first] = temp[first]; 38 first ++ ; 39 } 40 }
1 // Objective-C實現 2 // 通過NSMutableArray的Category實現 3 4 // .h文件 5 @interface NSMutableArray (ArraySort) 6 7 - ( void )mergeSort; 8 9 @end 10 11 // .m文件 12 13 #import " NSMutableArray+ArraySort.h " 14 15 @implementation NSMutableArray (ArraySort) 16 17 - ( void )mergeSort 18 { 19 [self sortByStartIndex: 0 endIndex:self.count - 1 ]; 20 } 21 22 - ( void )sortByStartIndex:( int )start endIndex:( int )end 23 { 24 if (start < end) 25 { 26 int mid = (start + end) / 2 ; 27 [self sortByStartIndex:start endIndex:mid]; 28 [self sortByStartIndex:mid + 1 endIndex:end]; 29 [self mergeByStartIndex:start midIndex:mid endIndex:end]; 30 } 31 } 32 33 - ( void )mergeByStartIndex:( int )start midIndex:( int )mid endIndex:( int )end 34 { 35 int i = start,j = mid + 1 ; 36 NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:end + 1 ]; 37 38 while (i <= mid && j <= end) 39 if ([[self objectAtIndex:i] integerValue] <= [[self objectAtIndex:j] integerValue]) 40 [tempArray addObject:[self objectAtIndex:i ++ ]]; 41 else 42 [tempArray addObject:[self objectAtIndex:j ++ ]]; 43 44 while (i <= mid) 45 [tempArray addObject:[self objectAtIndex:i ++ ]]; 46 while (j <= end) 47 [tempArray addObject:[self objectAtIndex:j ++ ]]; 48 49 for ( id object in tempArray) 50 [self replaceObjectAtIndex:start++ withObject: object ]; 51 } 52 53 @end
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
