冒泡排序:
void bubbleSort1A(int A[], int n){ //起泡排序算法(版本1A):0<=n bool sorted = false; // 整体排序标志,首先假定尚未排序 while(!sorted) { //在尚未确认全局排序之前,逐趟进行扫描交换 sorted = true; //假定已经排序 for(int i = 1; i < n; i++){ //自左向又逐对检测当前方位A[0,n)内的各相邻元素 if(A[i-1] > A[i]){ //一旦A[i-1]与A[i]逆序,则 swap(A[i-1], A[i]); //交换之,并 sorted = false; //因整体排序不能保证,需要清楚排序标志 } } } }
所谓算法,是指基于特定的计算模型,旨在解决某一信息处理问题而设计的一条指令序列。
本书说说的算法还应必须具备以下要素。
1、输入与输出
2、基本操作、确定性与可行性
所谓确定性和可行性,算法应可描述为若干语义明确的基本操作组成的指令序列,切每一操作在对应的计算模型中均可以实现。
3、有穷性和正确性
4、以起泡排序为例。经过k趟扫描交换之后,最大的前k个元素必然就位;经过k趟扫描校核之后,待求解问题的有效规模将缩减至n - k。
5、退化与鲁棒性
6、重用性
int countOnes( unsigned int n) { //统计整数n的二进制展开中位数1的总数; O(logn) int ones = 0; //计数器复位 while( 0 < n){//在n缩减至0之前,反复的 ones += (1 & n);//检测最低位,若为1则计数 n >> 1; //又移一位 } return ones;//返回计数 }