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); }
相关文章推荐
- Lecture 10: Divide and conquer methods, merge sort, exceptions
- 算法学习笔记--5.merge sort & divide-and-conquer
- 109. Convert Sorted List to Binary Search Tree (List; Divide-and-Conquer, dfs)
- merge sort and binary search recursive version
- [LeetCode]--315. Count of Smaller Numbers After Self(Binary Search Tree && Merge Sort)
- 归并排序(mergeSort) 与 分而治之策略(divide and conquer)
- 算法上机题目mergesort,priority queue,Quicksort,divide and conquer
- Divide and Conquer.(Merge Sort) by sixleaves
- Introduction to " Divide and Conquer"
- [Algorithm]九章三:Binary Tree & Divide Conquer
- some math problems solved by Recursion & divide and conquer
- leetcode_c++:Divide and Conquer: . Search a 2D Matrix II(240)
- 减治法——二分查找算法(Decrease and Conquer by a Factor - Binary Search Algorithm)
- Convert Sorted Array to Binary Search Tree and Merge Two Sorted Lists
- 九章算法系列(#3 Binary Tree & Divide Conquer)-课堂笔记
- leetcode Ch4-Binary Tree & BFS & Divide/Conquer
- [Divide and Conquer]240. Search a 2D Matrix II
- 3 Binary Tree & Divide Conquer
- Quick Sort & Binary Merge Sort
- 81. Search in Rotated Sorted Array II (Array; Divide-and-Conquer)