一.插入排序O(n^2)
void insertsort(int ar[], int k) {
//递归退出条件
if (k == 0)return ;
insertsort(ar, k - 1);//除递归外,还可用for循环套住下方
int x = ar[k];//末位(比较位)
int index = k - 1;//设定指针指向倒数第二位
while (x < ar[index]) {
ar[index + 1] = ar[index];//将原来的index处变为index+1
index--;//指针向后移一位,即指向index-1的位置
}
//由于上面进行了移位,就会在两个数之间留有一个空格(比如上面的index+1,index-1)那么把x插到index处,第一轮即可完成
ar[index] = x;//上面通过循环遍历找出最小的空位,这一步就进行插入操作
}
本图以只发现i+1是最小的大于x的数为例。
二.希尔排序O(nlog2n)--O(n^2)
void shellsort(int ar[]) {
int length = sizeof(ar) / sizeof(int);
for (int interval = length / 2; interval <= length; interval =interval/2) {
//对每一组进行插入排序
//每回按interval来加
for (int i = interval; i <= length; i++) {
int k = length - interval;
int x = ar[k];
int index = ar[k - interval];
//k有=0的可能
while (k>-1&&x < ar[index]) {
ar[index + interval] = ar[index];
index-=interval;
}ar[index] = x;
}
}
}
1391

被折叠的 条评论
为什么被折叠?



