选择排序:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
废话不说,上OC版本的代码:
//选择排序
//每次把最大的选出来 放到前面,然后依次类推
-(NSArray*)selectSort:(NSArray*)array
{
if (!array || array.count == 1)
{
return array;
}
NSMutableArray *sortResult = [NSMutableArray arrayWithArray:array];
NSInteger flag;
NSInteger execCount = 0;//交换次数
NSInteger forCount = 0;//for循环总共执行了多少次
for (NSInteger i = 0; i < sortResult.count; i++)
{
flag = i;
forCount++;
for (NSInteger j = i; j < sortResult.count - 1; j++)
{
if (sortResult[j + 1] > sortResult[flag])
{
flag = j + 1;
}
forCount++;
}
if (i != flag)
{
[sortResult exchangeObjectAtIndex:i withObjectAtIndex:flag];
execCount++;
[self displayArray:sortResult];
}
}
NSLog(@"交换共执行了%ld次", execCount);
NSLog(@"for循环共执行了%ld次", forCount);
return sortResult;
}
-(void)displayArray:(NSArray*)array
{
NSMutableString *displayString = [NSMutableString stringWithString:@"["];
for (NSInteger i = 0; i < array.count; i++)
{
i == array.count - 1 ? [displayString appendString:[NSString stringWithFormat:@"%ld", (long)[array[i] integerValue]]] :[displayString appendString:[NSString stringWithFormat:@"%ld%@", (long)[array[i] integerValue], @","]];
}
[displayString appendString:@"]"];
NSLog(@"%@", displayString);
}
执行结果如下:
2019-05-14 19:26:35.013 20190507_sort[4804:434106] [101,14,1,38,26,9,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,1,14,26,9,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,26,14,1,9,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,26,14,9,1,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,26,14,9,7,4,1]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] 交换共执行了5次
2019-05-14 19:26:35.014 20190507_sort[4804:434106] for循环共执行了36次
简单快速排序的算法时间复杂度同样为O(n²)。
网友评论