20140904 atoi字符串转化为整数源码
1、atoi源码
#include<stdio.h> #include<assert.h> bool isdigit1(char c) { if(c<='9'&&c>='0') return true; else return false; } int AsciiToInt(char *str) { assert(str!=NULL); char sign='+'; int total=0; int c; char *ptr=str; if(*ptr=='-'||*ptr=='+') { sign=*ptr++; } c=*ptr; while(isdigit1(c)) { total=total*10+(c-'0'); c=*(++ptr); } if(sign=='-') total=-total; return total; } int main() { char str[]="-1245"; int sum1=AsciiToInt(str); printf("%d\n",sum1); }
2、希尔排序比直接插入排序快的原因
希尔排序的时间性能优于直接插入排序的原因:
①当文件初态基本有序时直接插入排序所需的比较和移动次数均较少。
②当n值较小时,n和 的差别也较小,即直接插入排序的最好时间复杂度O(n)和最坏时间复杂度0(
)差别不大。
③在希尔排序开始时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快。
因此,希尔排序在效率上较直接插入排序有较大的改进。
希尔排序为什么不稳定
希尔排序为什么是不稳定的呢 ?
例子 3 5 10 8 7 2 8 1 20 6
d=2 分成2组 (3 10 7 8 20) 和(5 8 2 1 6) 第一组的8在第二组的后面
排序后(3 1 7 2 8 5 10 6 20 8,现在是第一组的8在第二组前面了 这里不稳定