Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156185
  • 博文数量: 27
  • 博客积分: 710
  • 博客等级: 上士
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 20:08
文章分类

全部博文(27)

文章存档

2012年(1)

2011年(22)

2010年(4)

我的朋友

分类: C/C++

2011-10-30 13:01:59

1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法。
  1. #include <iostream>
  2. using namespace std;

  3.     void QuickSort(int *s,int low,int high)
  4.     {

  5.         int pivot_pos;
  6.         int i;
  7.         int j;

  8.         //当low=high时递归退出
  9.         if (low < high)
  10.         {
  11.             //首先确定一个基准数
  12.             pivot_pos = s[low];
  13.             i = low;
  14.             j = high;

  15.             //查找基准数
  16.             while (i < j)
  17.             {
  18.                 //从后往前查找
  19.                 while (i<j && s[j]>=pivot_pos)
  20.                     j--;
  21.                 if(i < j)
  22.                 {
  23.                     s[i] = s[j];
  24.                     i++;
  25.                 }
  26.                 //从前往后查找
  27.                 while (i<j && s[i]<pivot_pos)
  28.                     i++;
  29.                 if (i < j)
  30.                 {
  31.                     s[j] = s[i];
  32.                     j--;
  33.                 }
  34.             }

  35.             s[i] = pivot_pos;
  36.             QuickSort(s,low,i-1);
  37.             QuickSort(s,i+1,high);

  38.         }

  39.     }

  40.     void find_pair(int *s,int n,int x)
  41.     {
  42.         int *begin=s;
  43.         int *end=s+n-1;

  44.         //俩头夹逼
  45.         while(begin<end)
  46.         {
  47.             if(*begin+*end>x)
  48.             {
  49.                 end--;
  50.             }
  51.             else if(*begin+*end<x)
  52.             {
  53.                 begin++;
  54.             }
  55.             else
  56.             {
  57.                 cout << *begin << " "<< *end <<endl;
  58.                 begin++;
  59.                 end--;
  60.             }
  61.         }

  62.         cout<<"No found!"<<" ";


  63.     }

  64.     int main()
  65.     {
  66.         int data[9] = {8,3,5,8,9,1,2,4,4};

  67.         QuickSort(data,0,8);

  68.         int x;


  69.         while(cin >> x)
  70.         {
  71.             find_pair(data,8,x);
  72.         }


  73.         return 0;
  74.     }

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