思想:分成未排序和已排序两个部分, 从未排序的部分取出一个元素, 将这个元素和已排序的部分数据做对比, 找到插入位置, 将该位置处的数据向后移动, 将插入位置数据赋值(从未排序中取出的值)
int* insertSort(int a[], int n) {
if (n <= 1) {
return a;
}
int i = 1;
for (i = 1; i < n; i++) {
// 分割已排序和未排序两个部分
int j = i - 1;
// 从未排序的部分取出一个元素
int value = a[i];
// 找到插入位置
for (; j >= 0; --j) {
if (a[j] > value) { // 做移动操作
a[j+1] = a[j];
} else {
break;
}
}
// 做插入操作
a[j+1] = value;
}
return a;
}
使用
int a[5] = {3, 1, 5, 4, 2};
int number = sizeof(a) / sizeof(int);
int *b = insertSort(a, number);
for (int i = 0; i < number; i++) {
NSLog(@"%d", b[i]);
}
网友评论