pragma mark - 插入排序算法 (升序)
- (void)sortWithArray:(NSArray *)array
{
NSMutableArray *mtlarray = [NSMutableArray arrayWithArray:array];
NSLog(@"排序前数组 = %@", mtlarray);
for (int i = 1; i < mtlarray.count; i++) {
int tmp = [mtlarray[i] intValue];
for (int j = i-1; j >= 0 && tmp < [mtlarray[j] intValue]; j--) {
NSLog(@"i == %d j == %d 循环时tmp = %d array[j]=%d", i, j, tmp, [mtlarray[j] intValue]);
mtlarray[j+1] = mtlarray[j];
mtlarray[j] = [NSNumber numberWithInt:tmp];
NSLog(@"循环时数组 = %@", mtlarray);
}
NSLog(@"tmp ===== %d", tmp);
}
NSLog(@"排序后数组 = %@", mtlarray);
}
pragma mark - 冒泡排序算法 (升序)
/*
需要两层for循环,
第一层for循环决定了对比循环的圈数,(第一圈后,决定了最后一个数,第二圈后,决定了后两个数,下次圈循环时,这些数不需要再对比),
第二层for循环,是相邻元素的对比,按大小将两个元素交换位置即可.
*/
-
(void)bubbleSortWithArray:(NSArray *)array
{
NSMutableArray *mtlarray = [NSMutableArray arrayWithArray:array];
NSLog(@"排序前数组 = %@", mtlarray);
for (int i = 0; i < mtlarray.count-1; i++) {
for (int j = 0; j < mtlarray.count-i-1; j++) {
NSLog(@"循环时 i == %d j == %d array[j]=%d", i, j, [mtlarray[j] intValue]);
if ([mtlarray[j] intValue] > [mtlarray[j+1] intValue]) {
NSString *tmp = mtlarray[j];
mtlarray[j] = mtlarray[j+1];
mtlarray[j+1] = tmp;
}NSLog(@"循环时数组 = %@", mtlarray); }
}
NSLog(@"排序后数组 = %@", mtlarray);
}
pragma mark - 选择排序 (升序)
/*
每一次从待排序的数据元素中选出最小或最大的一个元素,存放在数组的起始位置,知道全部待排序的元素排完
*/
-
(void)selectedSortWithbubbleSortWithArray:(NSArray *)array
{
NSMutableArray *mtlarray = [NSMutableArray arrayWithArray:array];
NSLog(@"排序前数组 = %@", mtlarray);
for (int i = 0; i < mtlarray.count; i++) {
for (int j = i+1; j < mtlarray.count; j++) {
NSLog(@"循环时 i == %d j == %d", i, j);
if ([mtlarray[i] intValue] > [mtlarray[j] intValue]) {
NSString *tmp = mtlarray[i];
mtlarray[i] = mtlarray[j];
mtlarray[j] = tmp;
}NSLog(@"循环时数组 = %@", mtlarray); }
}
NSLog(@"排序后数组 = %@", mtlarray);
}