ACM 基础算法
快速排序:
【性质】该算法是不稳定的(时间复杂度不稳定)
寻找一个基准数,并且按照这个基准数来对区间内的数进行排序。
void quick_sort(int array[],int l,int r){if(l>=r) return;//区间没有数或者只有一个数int x=array[l],m=l-1,n=r+1;while(m < n){do m++;while(array[m]x);if(m
【例子】array[8]={49,38,65,97,76,13,27,49}

归并排序:
【性质】该算法是稳定的,即相等的项彼此的相对位置是不会发生改变
【方法】①确定分界点:mid=(l+r)/2
②递归排序left,right
③归并--合二为一
void merge_sort(int *array,int l,int r){if(l>=r) return;int mid=l+r>>1;//>>1 为二进制右移运算符merge_sort(array,l,mid);merge_sort(array,mid+1,r);int x=0,m=l,n=mid+1;while(m<=mid && n<= r){if(array[m] <= array[n]){tmp[x++] = array[m++];}else{tmp[x++] = array[n++];} }while(m <= mid) tmp[x++]=array[m++];while(n <= r) tmp[x++]=array[n++];for(m=l,n=0;m<=r;m++,n++) array[m]=tmp[n];
}
【图解】

二分查找:
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。
int bsearch_1(int l, int r){while (l < r){int mid = l + r >> 1;if (check(mid)){r = mid;}else{l = mid + 1;}}return l;
}
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。
int bsearch_2(int l, int r){while (l < r){int mid = l + r + 1 >> 1;if (check(mid)){l = mid;}else{r = mid - 1;}}return l;
}
高精度算法:
【方法】数字以string的方式读入,将数字按位倒叙存入数组,按照手算进位即可。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

