数据结构 第一节

冒泡排序:

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;//返回计数 
} 
原文地址:https://www.cnblogs.com/zangkuo/p/8111055.html