归并排序

2021-09-15  本文已影响0人  炒河粉儿

归并排序的核心思路

归并排序的操作流程。

归并排序算法的相关

归并排序的代码简单实现

//归并排序
- (void)mergeSort
{
    NSMutableArray *numberArray = [NSMutableArray arrayWithArray:@[@5,@1,@6,@2,@4,@3]];
    
    NSLog(@"排序之前的结果:%@",numberArray);
    
    NSMutableArray *numberArrayTemp = [NSMutableArray arrayWithArray:@[@5,@1,@6,@2,@4,@3]];
    
    [self mergeSortwithArry:numberArray withTempArray:numberArrayTemp withleftIndex:0 withRightIndex:(int)numberArray.count-1];
    
    
    NSLog(@"排序之后的结果:%@",numberArray);
}

- (void)mergeSortwithArry:(NSMutableArray *)array withTempArray:(NSMutableArray *)arrayTemp withleftIndex:(int)left withRightIndex:(int)right
{
    int mid;
    
    if (left < right) {
        
        mid = left + (right-left)/2;
        
        [self mergeSortwithArry:array withTempArray:arrayTemp withleftIndex:left withRightIndex:mid];
        
        [self mergeSortwithArry:array withTempArray:arrayTemp withleftIndex:mid+1 withRightIndex:right];
        
        [self mergewithArry:array withTempArray:arrayTemp withleftIndex:left withRightIndex:right withMidIndex:mid];
    }
}

- (void)mergewithArry:(NSMutableArray *)array withTempArray:(NSMutableArray *)arrayTemp withleftIndex:(int)left withRightIndex:(int)right withMidIndex:(int)mid
{
    int i = left;
    
    int j = mid+1;
    
    int k = left;
    
    while (i != mid+1 && j != right+1) {
        
        if ([array[i] intValue] > [array[j] intValue]) {
            arrayTemp[k++] = array[j++];
        }else {
            arrayTemp[k++] = array[i++];
        }
    }
    
    while (i != mid+1) {
        arrayTemp[k++] = array[i++];
    }
    
    while (j != right+1) {
        arrayTemp[k++] = array[j++];
    }
    
    for (int a = left; a<=right; a++) {
        array[a] = arrayTemp[a];
    }
    
}

上一篇 下一篇

猜你喜欢

热点阅读