在一組序列中查詢兩個元素的和等於給定的值(快排+兩端掃描實現)
阿新 • • 發佈:2019-01-01
// 採用兩端掃描法 result findTwoNumber(vector<int> &a,int Num) // 不能寫成vector <int>a,因為如果是值傳遞,在該函式體內部呼叫fastsort(a,0,len) // 會產生一個新的拷貝,經過快排之後沒法修改數組裡的元素順序 { struct result res; unsigned int len = a.size()-1; fastsort(a,0,len); for (int i=0;i<=len;i++) { cout << a[i] <<endl; } int begin = 0; int end = len; while (begin < end) { if(a[begin] + a[end] < Num) ++begin; else if(a[begin] + a[end] > Num) --end; else break; } res.a = a[begin]; res.b = a[end]; return res; } void swap(int i,int j) { int temp = i; j = i; i = temp; }
int main() { int a[10] = {7,2,9,47,22,32,12,6,11,15}; vector <int> arr; for (int i=0; i<10; i++) { arr.push_back(a[i]); } //cout << arr.size()<<endl; //fastsort(arr,0,arr.size()); result ans = findTwoNumber(arr,14); cout << ans.a <<endl; cout << ans.b <<endl; system("pause"); return 0; }