算法(快排思想):求无序数组中的中位数

/**

 求无序数组当中的中位数(快排思想,选中关键字,高低交替扫描)

 

 示例:

[@"1",@"9",@"6",@"8",@"3",@"2"]

 

 输出:

@"3"

 

 */

+ (void)findMedianValue {

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"9",@"6",@"8",@"3",@"2", nil];

    NSLog(@"输入数据:%@",array);

    NSInteger low = 0;

    NSInteger high = array.count - 1;

    

    NSInteger mid = high/2;

    NSInteger result = [self arraySort:array IndexStart:low IndexEnd:high];

    while(result != mid) {

        if (result < mid) {

            result = [self arraySort:array IndexStart:result+1 IndexEnd:high];

        }else {

            result = [self arraySort:array IndexStart:low IndexEnd:result-1];

        }

    }

    NSLog(@"中位数是:%@",array[mid]);

}

 

+ (NSInteger)arraySort:(NSMutableArray *)array IndexStart:(NSInteger)indexStart IndexEnd:(NSInteger)indexEnd {

    

    NSInteger keyValue = [array[indexEnd] integerValue];

    NSInteger lastEnd = indexEnd;

    

    while (indexStart < indexEnd) {

        while (indexStart < indexEnd && [array[indexStart] integerValue] <= keyValue) {

            indexStart++;

        }

        while (indexStart < indexEnd && [array[indexEnd] integerValue] >= keyValue) {

            indexEnd--;

        }

        if (indexStart < indexEnd) {

            NSString *temp = array[indexStart];

            array[indexStart] = array[indexEnd];

            array[indexEnd] = temp;

        }

    }

    NSString *temp = array[indexEnd];

    array[indexEnd] = array[lastEnd];

    array[lastEnd] = temp;

    return indexStart;    

}

 

运行:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值