思想:
将待排序数组看作是有序和无序两部分。
初始状态,有序部分只有一个元素,其余数组元素均属于无序部分的。
按照顺序每次从无序的部分数组中选择一个元素将其插入在有序部分数组合适的位置上即可。
数组元素基本有序时,直接插入排序时间复杂度接近与O(n),性能非常好。
#include <stdio.h>
void show(int *a, int n) {
int i = 0;
for (i = 0; i < n; i++) {
printf("%d", a[i]);
if (i != n - 1) {
printf(" ");
}
}
printf("\n");
}
typedef int bool;
#define true 1
#define false 0
void swap(int *a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
void InsertSort(int *a, int n) {
int i;
for (i = 1; i < n; i++) {
int j;
int e = a[i];
for (j = i; j >= 1 && a[j - 1] > e; j--) {
a[j] = a[j - 1];
}
a[j] = e;
}
}
int main() {
int a[] = {3, 1, 2, 4, 7, 0, 5, 8, 6, 9};
int n = sizeof(a) / sizeof(int);
show(a, n);
InsertSort(a, n);
show(a, n);
return 0;
}