摘要:
1、顺序查找int find1(int *array,int n,int val)
{ if (n<=0) { return -1; } for (int i=0;i<n;i++) { if (val==array[i]) { return i; } } return -1;
}2、二分查找int find2(int *array,int n,int val)
{ if (n<=0) { return -1; } int begin=0,end=n-1,mid; while(begin<=end) { mid... 阅读全文
随笔分类 - 编程珠玑学习
编程珠玑第十一章----排序
2012-07-27 13:15 by javaspring, 274 阅读, 收藏,
摘要:
1、快速排序 原理:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。void quickSort(int *a,int s,int t) //数组首地址a,数组起始位置s(初始值为0),结束位置t(初始值为n-1)
{ int i=s,j=t+1,temp,x=a[s]; do { do { i++; } while (a[i]<a[s]); //找比第一个元素小的元素 do { j--; } while (a[s]<a[j]); //找比... 阅读全文
编程珠玑第九章
2012-07-27 12:54 by javaspring, 139 阅读, 收藏,
摘要:
1、内存访问(连续内存访问与跨页面访问内存的区别) 注意在访问内存的时候,要注意内存的连续性,如果访问的内存不是连续的,那么程序的运行速度也会受到极大的影响 例如访问一个二维数组时,先访问行,再访问列,能够减少页面调度次数,同时cache命中率也相对高些。2、递归调用宏时,需要小心,宏中的某个参数被调用了多次以致数值发生了变化 #define Max(a,b) ((a>b)?:(a):(b)) // Max(i++,j++),调用之后,i、j的值可能会增加两次 //max(i++,func(j++)),调用之后,可能会导致函数func()被调用两次 阅读全文
编程珠玑第八章
2012-07-27 12:23 by javaspring, 250 阅读, 收藏,
摘要:
1、求一个整型数组中相邻子向量的最大和。方法一:最直观的,也是最容易想到的,长度为n的数组,子向量个数为 n *(n+1)/ 2 ,找到和最大的子向量,复杂度为 O(n^2 )int findMax(int *a,int n) //a为待查找数组,n为数组长度
{ int max=0,sum=0; for (int i=0;i<n;i++) { sum=0; for (int j=i;j<n;j++) { sum+=a[j]; max=max>sum?max:sum; } } return max;
}改进方法:顺序查找整个数组,用maxSofar存... 阅读全文
编程珠玑第四章
2012-07-27 10:53 by javaspring, 310 阅读, 收藏,
摘要:
1、二分查找代码int find(int *a,int n,int key) //a为待查找数组,n为数组长度,key为待查找元素
{ int begin=0,end=n-1,mid=0; while(begin<=end) { mid=(begin+end)/2; if(a[mid]==key) //相等,直接返回key在数组中的位置 return mid; else if(a[mid]>key) //key较小,在左半部分查找 end=mid-1; else //key较大,在... 阅读全文
编程珠玑第三章
2012-07-27 10:31 by javaspring, 295 阅读, 收藏,
摘要:
1、本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联邦所得税。税率序列为0.14, 0.15, 0.16, 0.17, 0.18.....。序列中此后的计算大于0.01.有何建议呢?if income <= 2200 tax = 0;else if income <= 2700 tax = 0.14 * (income - 2200);else if income <= 3200 tax = 70 + 0.15 * (income - 27 阅读全文