void insertSort(int a[], int n) {
for (int i = 1; i < n; ++i) {//从第二个开始插入
if (a[i] < a[i - 1]) {
int t = a[i];
int j = i;
while (j>0 && a[j-1] > t) {
a[j] = a[j-1];
--j;
}
a[j] = t;
}
}
}
void shellSort(int a[], int n) {
for (int gap = n/2; gap >0; gap /=2) {
for (int i = 0; i < gap; ++i) {
for (int j = i + gap;j <n; j +=gap) {
if (a[j] > a[j - gap]) {
int t = a[j];
int k = j;
while (k >0 && a[k-gap] > t) {
a[k] = a[k-gap];
k -= gap;
}
a[k] = t;
}
}
}
}
}
代码比较冗长,下面的http://blog.csdn.net/morewindows/article/details/6665714
有很简洁的实现