OC 排序汇总

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。

-(NSMutableArray*)array_sort:(NSArray*)numarr
{
    NSUInteger count=numarr.count;
    int a[count];
    //把数组里的元素一一取出转化为整型:
    for (int i =0; i  a[i + 1])
            {
                int temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
    }
    //把排好序的数据重新放回数组里:
    for (int c =0; c 

快速排序:每次选一个基准数,比基准数小的放左边,比基准数大的放右边。

 NSMutableArray *QuickSortArr = [[NSMutableArray alloc] initWithObjects:@"2",@"3",@"6",@"9",@"1",@"4",nil];
  [self quickSort:QuickSortArr LowQ:0 HightQ:5];

//快速排序
-(NSMutableArray *)quickSort:(NSMutableArray *)dataArr LowQ:(int)low HightQ:(int)hight
{
    
    //1.首次调用传入要排序的数组,传入起始索引和最高索引,对齐比较。
    if(low

直接插入排序:插前面,依次根后面的数比较

+ (NSMutableArray *)directSortWithString:(NSString *)str {
    NSLog(@"正在进行直接插入排序,请稍等...");
    NSMutableArray *sortedArr = [[NSMutableArray alloc]init];
    NSArray *tempArr = [str componentsSeparatedByCharactersInSet:
                        [NSCharacterSet whitespaceCharacterSet]];
    for(NSString *word in tempArr)
    {
        if (![word isEqualToString:@""]) {
            int selectIndex = [self directSortSelectIndexWithSortedArr:sortedArr WithString:word];
            [sortedArr insertObject:word atIndex:selectIndex];
        }
    }
    return sortedArr;
}
#pragma mark 快速插入排序
+(int)directSortSelectIndexWithSortedArr:(NSMutableArray *)arr WithString:(NSString *)str{
    float willSortNumber = [str floatValue];
    for (int i = 0; i < arr.count; i++) {
        if (willSortNumber < [arr[i] floatValue]) {
            return i;
        }
    }
    return arr.count;
}

二分插入排序:每次插中间。

+ (NSMutableArray *)dichotomySortWithString:(NSString *)str{
    NSMutableArray *sortedArr = [[NSMutableArray alloc]init];
    NSLog(@"正在进行二分法插入排序,请稍等...");
    NSArray *tempArr = [str componentsSeparatedByCharactersInSet:
                        [NSCharacterSet whitespaceCharacterSet]];
    for(NSString *word in tempArr)
    {
        if (![word isEqualToString:@""]) {
            int selectIndex = [self dichotomySelectIndexWithSortedArr:sortedArr WithString:word];
            [sortedArr insertObject:word atIndex:selectIndex];
        }
    }
    return sortedArr;
}
#pragma mark 二分法插入排序
+(int)dichotomySelectIndexWithSortedArr:(NSMutableArray *)arr WithString:(NSString *)str{
    float willSortNumber = [str floatValue];
    int left = 0;
    int i = 0;
    int righr = arr.count;
    int middle = (righr + left) / 2;
//    int middle2 = (righr -left)/2 +left
    while (righr > left)
    {   i ++;
        middle = (left + righr) / 2;
        (willSortNumber < [arr[middle] floatValue]) ? righr = middle : (left = middle + 1);
    }
    return left;
}

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
/*

 21,4,25,8
 
 1---4,21,25,8
 
 2---4,8,25,21
 
 3---4,8,21,25
 
 */
NSMutableArray * dataArray = [[NSMutableArray alloc]initWithObjects:@"15",@"8", @"9", @"87", @"22",@"1",@"29",@"11",  nil];
    
    for (int i = 0; i < dataArray.count - 1; i ++)
    {
        // 声明一个min 假设是最小值的那个索引
        int min = i;
        
        // 将第min个值与其他值进行对比
        for (int j = i + 1; j < dataArray.count; j++)
        {
            // 如果min对应的值大于后面的 说明j索引对应的值较小 就把 j赋给min
            if ([[dataArray objectAtIndex:min] intValue]  > [[dataArray objectAtIndex:j] intValue] )
            {
                min = j;
                
            }
        }
        // 如果 m与i相同 就不用进行交换  不同的话就进行交换
        if (min != i)
        {
            [dataArray exchangeObjectAtIndex:min withObjectAtIndex:i];
        }
    }
    NSLog(@"==----%@",dataArray );

你可能感兴趣的:(OC 排序汇总)