Chinaunix首页 | 论坛 | 博客
  • 博客访问: 675202
  • 博文数量: 156
  • 博客积分: 3402
  • 博客等级: 中校
  • 技术积分: 1639
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-13 14:06
个人简介

业余编程爱好者

文章分类

全部博文(156)

文章存档

2014年(1)

2013年(13)

2012年(46)

2011年(38)

2010年(58)

分类: LINUX

2012-05-29 14:40:03

    数据结构决定算法!这两天在学习数据结构与算法,就下面两道算法题,给出自己的代码:

    1,给定N个随机数,求第k个数是多少。当N等于1000000,k等于500000时。我是采用了位图法,先生成一个测试用的随机数数组,个数有100万个,其中的元素取值范围为1-1000000之间。输出是经排序后的第50万个元素。值得注意的是,100万个元素的数组只能在main函数外部定义。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. unsigned long next1 = 2;
  3. unsigned int input[1000000];
  4. unsigned int temp[1000000];
  5. int main()
  6. {
  7.     
  8.     unsigned long i;
  9.     unsigned long j;
  10.     
  11.     for(i=0; i<1000000; i++) {
  12.         input[i] = rand1();
  13.         temp[i] = 0;
  14.     }
  15.     
  16.     for(i=0; i<1000000; i++) {
  17.         j = input[i];
  18.         temp[j]++;
  19.     }
  20.     
  21.     j = 0;
  22.     for(i=0; j<500000; i++) {
  23.         j += temp[i];
  24.     }
  25.     printf("%u",i);
  26.         
  27. //    for(i=0; i<1000000; i++)
  28. //        printf("%u ",temp[i]);
  29.     return 0;
  30. }

  31. int rand1(void)
  32. {
  33.     next1 = next1 * 1103515245 + 12345;
  34.     return (unsigned int)(next1/200) % 1000000;
  35. }

    2,对一个长度为LENGTH的向量,向左旋转NUM个位置。要求是只能用一个中间向量,并且时间要跟LENGTH成正比。我是使用了一个中间数组,对原左边进行一次反转,再对右边进行一次反转,最后对整个中间数组,进行反转。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #define LENGTH 8
  3. #define NUM 3

  4. int main()
  5. {
  6.     char input[] = {"abcdefgh"};
  7.     char temp[100];
  8.     int i, j;
  9.     printf("%s\n",input);
  10.     
  11.     for(i=NUM-1, j=0; i>=0; i--, j++)
  12.         temp[j] = input[i];
  13.     for(i=LENGTH-1, j=NUM; i>=NUM; i--, j++)
  14.         temp[j] = input[i];
  15.     for(i=LENGTH-1, j=0; i>=0; i--, j++)
  16.         input[j] = temp[i];
  17.     printf("%s\n",input);
  18.     return 0;
  19. }

阅读(768) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~