OC下的冒泡排序,直接插入排序,折半插入排序

来源:互联网 发布:阿里云网站备案 编辑:程序博客网 时间:2024/05/22 14:33
   //直接排序算法,取出当前第n位的数(待排序的数),和大于第n位的数逐一比较,如果第n+k这位数大于待排序的数,那么两个对换一下位置第n+k位的值和第n位数的值,直接给个例子更好理解
    
    // arr=@"53,76,34,56,49"
    //(1)arr[0]和arr[1]比较,arr[0]小于arr[1] 位置不变,接着和下一位arr[2]比较,arr[0]大于arr[2],这时候arr[0]和arr[2]的值互换,注意是值互换,这时候变成了34、76、53、56、49,然后继续还是arr[0]和arr[3]和arr[4]比较,第一次循环完得到的排序是34、76、53、56、49,以此类推,第一次循环完找出最小的一个数,放在arr[0]这个位置,第二次循环找出第二小的数值放在arr[1]的位置。
    
    NSMutableArray *arrMutable=[NSMutableArray arrayWithObjects:@"53",@"76",@"34",@"56",@"49", nil];

    for (int i=0; i<arrMutable.count; i++) {
        
        for (int j=i+1;j<arrMutable.count; j++) {
            
            int number=[arrMutable[i] intValue];
            
            int twoNumber=[arrMutable[j] intValue];
            
            if(number>twoNumber){//如果后面数大于待排序的数时,两者替换位置
                
                [arrMutable exchangeObjectAtIndex:i withObjectAtIndex:j];
            }
            
        }
        NSLog(@"%@",arrMutable);
        
    }
    

    //折半排序 原理就是未排序的数和已经排序好的数进行比较,然后插入他们其中他是在直接排序基础上面优化而来的:如下图

                     

    for (int i=0; i<arrMutable.count; i++) {
      
       
        for (int j=0;j<i; j++) {//i表示已经排序好的个数,
            
            int yNumber=[arrMutable[i-j-1] intValue];//前面一位数
            
            int dnumber=[arrMutable[i-j] intValue];//待排序的数 后面一位数
            
            if(dnumber<yNumber){//如果待排序的数小于已经排序好的数
               [arrMutable exchangeObjectAtIndex:i-j-1 withObjectAtIndex:i-j];
            }
            
        }
         NSLog(@"%@",arrMutable);
    }
    
    //冒泡排序 冒泡排序就是找出最大值,相邻的两位数进行比较,每比较一次进行位移一次,冒泡和直接排序的不同有两点(1)冒泡是找出最大值,直接排序是找出最小值(2)冒泡排序是相邻两位数以位移的方式比较,直接插入排序是从数组小标为0开始和后面的数依次排序
    for(int i=0;i<arrMutable.count;i++){
     
        for(int j=0;j<arrMutable.count-i-1;j++){
            
            int one=[arrMutable[j] intValue];
            
            int two=[arrMutable[j+1] intValue];
            
            if(one>two){
                
                [arrMutable exchangeObjectAtIndex:j+1 withObjectAtIndex:j];
                
            }
        }
          NSLog(@"%@",arrMutable);
    }
 
0 0
原创粉丝点击