您的位置:首页 > 产品设计 > UI/UE

Algorithms Review: Divide and Conquer(Binary Search & Merge Sort)

2012-07-15 02:31 363 查看
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include <algorithm>
using namespace::std;

class DivideAndConquer
{
public:
int binarySearch(int target, int* inputArray, int size)
{
if(size < 1)
{
cout<<"error"<<endl;
exit(0);
}
sort(inputArray, inputArray + size);
//cout<<"size: "<<size<<endl;
if(target < inputArray[size/2])
{
//cout<<"array1 "<<inputArray[size/2]<<endl;
return binarySearch(target, inputArray, size/2);

}
if(target > inputArray[size/2])
{
//cout<<"array2 "<<inputArray[size/2]<<endl;
return binarySearch(target, inputArray + size/2, size/2);
}
if(target == inputArray[size/2])
{
//cout<<"array3 "<<inputArray[size/2]<<endl;
return inputArray[size/2];
}

}

void mergeSort(int * inputArray, int start, int end)
{
if(start < end)
{
int mid = ( start + end ) / 2;
mergeSort(inputArray, start, mid);
mergeSort(inputArray, mid + 1, end);
merge(inputArray, start, mid, end);
}

}

void printArray(int * inputArray, int size)
{
for(int i = 0; i < size; i++)
{
cout<<inputArray[i]<<"  ";
}
cout<<endl;
}

private:
void merge(int* inputArray, int start, int mid, int end)
{

int* new_array = new int[end - start + 1];

int i = start, j = mid + 1, x = 0;
//cout<<"size: "<<size<<endl;
while(i <= mid && j <= end)
{
if(inputArray[i] > inputArray[j])
{
new_array[x++] = inputArray[j++];

}
else
{
new_array[x++] = inputArray[i++];

}

}

while(i <= mid)
{
new_array[x++] = inputArray[i++];

}

while(j <= end)
{
new_array[x++] = inputArray[j++];
}

for(i = start, x = 0; i <= end; i++, x++)
{
inputArray[i] = new_array[x];
}

}
};

int main()
{
int aa[] = {102, 232, 9, 32, 1, 23, 34, 55, 112, 993};
//int aa[] = {1,9,23,32,34,55,102,112,232,993};
DivideAndConquer ss;
//cout<<ss.binarySearch(23, aa, 10)<<endl;

ss.mergeSort(aa, 0, 9);
ss.printArray(aa, 10);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  merge search