//插入排序,把待排序的数组分为两部分,左边为已经有序的数组,右边为待排序的元素。然后不断的从右边取出元素放入左边已经排序好的数组中。
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;
}
网友评论