- 使用的是快速排序,加上两头夹逼来查找
- #include <iostream>
- using namespace std;
- void QuickSort(int*s,int low,int high)
- {
- int pivot_pos;
- int i;
- int j;
- //当low=high时递归退出
- if (low< high)
- {
- //首先确定一个基准数
- pivot_pos = s[low];
- i = low;
- j = high;
- //查找基准数
- while (i < j)
- {
- //从后往前查找
- while (i<j && s[j]>=pivot_pos)
- j--;
- if(i< j)
- {
- s[i]= s[j];
- i++;
- }
- //从前往后查找
- while (i<j && s[i]<pivot_pos)
- i++;
- if (i < j)
- {
- s[j]= s[i];
- j--;
- }
- }
- s[i]= pivot_pos;
- QuickSort(s,low,i-1);
- QuickSort(s,i+1,high);
- }
- }
- void find_pair(int*s,int n,int x)
- {
- int *begin=s;
- int *end=s+n-1;
- //俩头夹逼
- while(begin<end)
- {
- if(*begin+*end>x)
- {
- end--;
- }
- else if(*begin+*end<x)
- {
- begin++;
- }
- else
- {
- cout <<*begin<<" "<<*end<<endl;
- begin++;
- end--;
- }
- }
- cout<<"No found!"<<" ";
- }
- int main()
- {
- int data[9]={8,3,5,8,9,1,2,4,4};
- QuickSort(data,0,8);
- int x;
- while(cin>> x)
- {
- find_pair(data,8,x);
- }
- return 0;
- }
1. 给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法。
最新推荐文章于 2021-11-27 15:56:06 发布