1、atoi源码
#include<stdio.h>#include<assert.h>bool isdigit1(char c){if(c<='9'&&c>='0')return true;elsereturn 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在第二组前面了 这里不稳定
/cjf_iceking/article/details/7916194