排序算法---直接插入排序

//插入排序,把待排序的数组分为两部分,左边为已经有序的数组,右边为待排序的元素。然后不断的从右边取出元素放入左边已经排序好的数组中。

static NSArray * straightInsertionSort(NSArray *unsortedArr)

{

NSMutableArray *sortedArray = [NSMutableArray arrayWithArray:unsortedArr];

/**  拿出每一个数  */

/**  默认0 位置为已经排序的区间,0--->n为没有排序的区间,所以直接从1位置开始拿出数据  */

for (int i = 1; i < sortedArray.count; i++)

{

/**  拿出当前位置的数a,和前一位置的数字b进行大小比较,如果a < b,就在0---->i - 1的区间内为a找一个合适的位置去存放  */

/**  当前位置数字a  */

int a = [sortedArray[i] intValue];

/**  前一位置数字b  */

int b = [sortedArray[i - 1] intValue];

/**  如果a < b,则继续让a与b的前一位数字比较  */

if (a < b)

{

/**  如果a < b,就在0---->i - 1的区间内为a找一个合适的位置去存放  */

/**  从后往前找位置,0--->i - 1  */

for (int j = i - 1; j >= 0; j --) {

/**  2,12,98,42,94,46,53,12  */

/**  取出前一位数字ca  */

int c = [sortedArray[j] intValue];

if (c <= a) {

/**  对a进行位置移动,从原来位置删除,移动到c后面一位  */

[sortedArray removeObjectAtIndex:i];

[sortedArray insertObject:NUM(a) atIndex:j + 1];

break;

}

}

}

}

return sortedArray;

}

你可能感兴趣的:(排序算法---直接插入排序)