//
//introduction of Algorithm chapter 2 2.3-6
//将插入排序改成二分法,时间复杂度是不是可以改成(nlgn)?-------->不可以</p>
int binary(int * ary, int start, int end, int key){
int index = -1;
if (start == end && ary[start] > key) {
index = start;//可以用,在最后的2个里面有直接找出对应的位置
return index;
}
if (start > end) {
return -1;//越界
}
int middle = (start + end) / 2;
if (ary[middle] > key) {
index = binary(ary, start, middle, key);
}
else{
index = binary(ary, middle + 1, end, key);
}
return index;
}
void change_sort(int * ary, int len){
if (len <= 1) {
return;
}
for (int i = 1; i < len; i++) {
int key = ary[i];
int end = i - 1;
int nIndex = -1;
nIndex = binary(ary, 0, end, key);//用二分法,这里变成了nlgn
if (nIndex != -1) {
for (int nMove = end; nMove >= nIndex; nMove--) {//因为集体的移动导致了复杂度变成了n^2
ary[nMove + 1] = ary[nMove];
}
ary[nIndex] = key;
}
}
}
//修改了之前点写法,之前的写法,会让我写的第二次调用没用
课后习题
最新推荐文章于 2023-06-03 22:29:41 发布