插入排序的核心思路:从第二个数字开始,对第一二个数字进行排序;第三个数字插入到前面排好序的第一二个数字中来;以此类推,把第n个数字插入前面已经排好序的n-1个数字中来。
在这个过程中需要移位比较,例如从小到大排序:如果第n个数字前面有三个数字比它大,那么n位置前面的三个数字依次后移,空出位置插入第n个数字。
OC实现插入排序:
// 从小到大
- (NSArray *)insertionSortBigger:(NSMutableArray *)array {
for (int n = 1; n<array.count; n++) {
NSInteger valueN = [array[n] integerValue]; //取出第n个数字,对比大小,插入排序
int j = n-1; // j代表n-1
while (j>=0 && [array[j] integerValue] > valueN) { // 如果valueN前面的数字比valueN还大,那么,向后移位
array[j+1] = array[j]; // 向后移位
j--; // 再前一位对比valueN
}
array[j+1] = @(valueN); // 移位完成后插入
}
return array;
}