码迷,mamicode.com
首页 > 其他好文 > 详细

TCPL知识点总结(三)

时间:2015-04-20 22:43:23      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:c语言

坚持阅读经典代码,以下是《The C programming language》中的经典例子,每次读来都觉经典,遂摘录下来,此文为第三讲,后面讲陆续更新。

1 折半查找

   /* binsearch:  find x in v[0] <= v[1] <= ... <= v[n-1] */
   int binsearch(int x, int v[], int n)
   {
       int low, high, mid;
       low = 0;
       high = n - 1;
       while (low <= high) {
           mid = (low+high)/2;
           if (x < v[mid])
               high = mid + 1;
           else if (x  > v[mid])
               low = mid + 1;
           else    /* found match */
               return mid;
       }
       return -1;   /* no match */
   }
2 将字符串转化为对应数值
   #include <ctype.h>
   /* atoi:  convert s to integer; version 2 */
   int atoi(char s[])
   {
       int i, n, sign;
       for (i = 0; isspace(s[i]); i++)  /* skip white space */
           ;
       sign = (s[i] == '-') ? -1 : 1;
       if (s[i] == '+' || s[i] == '-')  /* skip sign */
           i++;
       for (n = 0; isdigit(s[i]); i++)
           n = 10 * n + (s[i] - '0');
       return sign * n;
   }
3 Shell排序
Shell排序算法是D. L. Shell于1959年发明的,其基本思想是:先比较距离远的元素,而不是像简单交换排序算法那样先比较相邻的元素。这样可以快速减少大量的无序情况,从而减轻后续的工作。被比较的元素之间的距离逐步减少,直到减少为1,这时排序变成了相邻元素的互换。
   /* shellsort:  sort v[0]...v[n-1] into increasing order */
   void shellsort(int v[], int n)
   {
       int gap, i, j, temp;
       for (gap = n/2; gap > 0; gap /= 2)
           for (i = gap; i < n; i++)
               for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
                   temp = v[j];
                   v[j] = v[j+gap];
                   v[j+gap] = temp;
               }
   }
4 倒置字符串s中各个字符的位置
   #include <string.h>
   /* reverse:  reverse string s in place */
   void reverse(char s[])
   {
       int c, i, j;
       for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
           c = s[i];
           s[i] = s[j];
           s[j] = c;
       }
   }
5 将数字转换为字符串
   /* itoa:  convert n to characters in s */
   void itoa(int n, char s[])
   {
       int i, sign;
       if ((sign = n) < 0)  /* record sign */
           n = -n;          /* make n positive */
       i = 0;
       do {      /* generate digits in reverse order */
           s[i++] = n % 10 + '0';  /* get next digit */
       } while ((n /= 10) > 0);    /* delete it */
       if (sign < 0)
           s[i++] = '-';
       s[i] = '\0';
       reverse(s);
   }
6 删除字符串尾部的空格符、制表符与换行符
   /* trim:  remove trailing blanks, tabs, newlines */
   int trim(char s[])
   {
       int n;
       for (n = strlen(s)-1; n >= 0; n--)
           if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
               break;
       s[n+1] = '\0';
       return n;
   }
转载请注明:http://blog.csdn.net/lsh_2013/article/details/45155901






TCPL知识点总结(三)

标签:c语言

原文地址:http://blog.csdn.net/lsh_2013/article/details/45155901

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!