插入排序

插入排序,与冒泡比较相似,不同的是,插入排序是一个数插入一个有序数列中,比较适合一个有序数列与一个数值的插入排序,对于无序数列的排序,还是推荐冒泡。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

有多种分类,直接插入排序,二分插入排序等,这里简单写下直接插入排序

 

 C语言版

// 函数声明
void insertion_sort( int array[],  int first,  int last);

int array[ 11] = { 23890127, - 95433699, - 17};
    
     // 调用
    insertion_sort(array,  010);
    
    printf( " sort result: ");
     for ( int p =  0; p <  11; p++) {
        printf( "  %d ", array[p]);
    }
    printf( " \n ");
     // sort result: -17 -9 3 7 8 12 23 36 54 90 99

void insertion_sort( int array[],  int first,  int last) {
     int i =  0, j =  0;
     int temp =  0;
     for(i = first +  1; i <= last; i++)
    {
        temp = array[i];
        j    = i -  1;
        
         // array[j]大于temp的数时,把大于temp的数向后移动一位到array[j+1],然后把temp放在array[j]处
        
// 与已排序的数逐一比较,大于temp时,该数移后
         while((j >=  0) && (array[j] > temp))
        {
            array[j+ 1] = array[j];
            j--;
        }
        
         // 存在大于temp的数 把temp放在前面的位置
         if(j!=i- 1) {
            array[j+ 1] = temp;
        }
    }
}

 

OC版

_dataArray = [NSMutableArray arrayWithObjects:@ 21, @ 3, @ 34, @(- 28), @ 10, @(- 33), @ 54, @ 9, @ 0, @(- 2),  nil];

// 调用
[self insertSort];
    
NSString * string = [self.dataArray componentsJoinedByString: @"   "];
NSLog( @" sort result : %@ "string);
// sort result : -33 -28 -2 0 3 9 10 21 34 54

- ( void)insertSort {
    NSInteger i =  0, j =  0;
    NSInteger temp =  0;
     for ( int k =  0; k < self.dataArray.count; k++) {
        NSNumber *number = [NSNumber numberWithInteger:[self.dataArray[k] integerValue]];
        self.dataArray[k] = number;
    }
     for (i =  1; i < self.dataArray.count; i++) {
        temp = [self.dataArray[i] integerValue];
        j    = i -  1;
        
         while ((j >=  0) && ([self.dataArray[j] integerValue] > temp)) {
            self.dataArray[j+ 1] = self.dataArray[j];
            j--;
        }
        
         if (j != i- 1) {
            self.dataArray[j+ 1] = [NSNumber numberWithInteger:temp];
        }
    }
}

 

 swift版

var dataArray:NSMutableArray = [ 76119, - 424680, - 19];

// 调用
self.insertSort();
let  string:NSString = dataArray.componentsJoinedByString( "   ");
NSLog( " sort result: %@ "string);
// sort result: -19 -4 0 1 2 4 6 8 19 76

func insertSort() {
    var j:NSInteger =  0;
    var temp:NSInteger =  0;
    
     for k:NSInteger  in  0 ..< dataArray.count {
        let currentNumber:NSNumber = NSNumber.init(integer: dataArray[k].integerValue);
        dataArray[k] = currentNumber;
    }
    
     for i:NSInteger  in  1..<dataArray.count {
        temp = dataArray[i].integerValue;
        j    = i -  1;
        
         while ((j >=  0) && (dataArray[j].integerValue > temp)) {
            dataArray[j+ 1] = dataArray[j];
            j-= 1;
        }
        
         if j != (i- 1) {
            dataArray[j+ 1] = NSNumber.init(integer: temp);
        }
    }
}

 

转载于:https://www.cnblogs.com/NINIiOS/p/5650773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值