插入排序 选择排序 交换排序 归并排序 基数排序等等.
那么如何随机打乱一个数组呢?基本思想就是数组的第i个元素和后面的从i+1到n-1中的随机一个元素交换.
算法实现:
声明一个类别NSMutableArray+Shuffling
//
// NSMutableArray+Shuffling.h
// 随机打乱一个数组
//
// Created by dengyanzhou on 14/12/25.
// Copyright (c) 2014年 mobby. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSMutableArray (Shuffling)
-(void)shuffle;
@end
//
// NSMutableArray+Shuffling.m
// 随机打乱一个数组
//
// Created by dengyanzhou on 14/12/25.
// Copyright (c) 2014年 mobby. All rights reserved.
//
#import "NSMutableArray+Shuffling.h"
@implementation NSMutableArray (Shuffling)
-(void)shuffle{
{
NSUInteger count = self.count;
// 算法
for (int i = 0; i < count; ++i) {
int n = (arc4random() % (count - i)) + i;
[self exchangeObjectAtIndex:i withObjectAtIndex:n];
}
}
}
@end
在main.m文件调用 测
//
// main.m
// 随机打乱一个数组
//
// Created by dengyanzhou on 14/12/25.
// Copyright (c) 2014年 mobby. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "NSMutableArray+Shuffling.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10", nil];
[array shuffle];
NSLog(@"打乱后的array == %@",array);
}
return 0;
}
运行结果
打乱后的array == (
9,
10,
2,
5,
1,
6,
3,
4,
7,
8
)