归并排序

来源:互联网 发布:李炎恢javascript讲义 编辑:程序博客网 时间:2024/06/06 08:26

看懂了这段代码,就真的理解了归并排序。

#include <iostream>class MergeSort{private:int *arr_;int size_;void mergeSort(int *tmp_p, int lowerBound, int upperBound){if(lowerBound == upperBound)return;else{int mid = (lowerBound + upperBound)/2;mergeSort(tmp_p, lowerBound, mid);mergeSort(tmp_p, mid+1, upperBound);merge(tmp_p,lowerBound,mid,upperBound);}}void merge(int *tmp_p, int lowerBound, int mid, int upperBound){int lower = lowerBound;int upper = mid+1;int tmp_ind = lowerBound;while((lower < mid + 1)&&(upper < upperBound + 1)){if(arr_[lower] < arr_[upper])tmp_p[tmp_ind++] = arr_[lower++];elsetmp_p[tmp_ind++] = arr_[upper++];}while(lower < mid + 1)tmp_p[tmp_ind++] = arr_[lower++];while(upper < upperBound + 1)tmp_p[tmp_ind++] = arr_[upper++];for(int j = lowerBound; j<=upperBound; j++)arr_[j] = tmp_p[j];}public:MergeSort(int maxSize):size_(0),arr_(new int[maxSize]){}~MergeSort(){delete[] arr_;}void insert(int data){arr_[size_++] = data;}int length(){return size_;}void display(){for(int i=0;i<size_;++i){std::cout << arr_[i];if(i < size_ - 1)std::cout << ",";}std::endl(std::cout);}void sort(){int *tmp_p = new int[size_];mergeSort(tmp_p, 0 , size_-1);delete[] tmp_p;}};int main(){MergeSort ms(100);ms.insert(2);ms.insert(1);ms.insert(4);ms.insert(3);ms.insert(0);ms.insert(10);ms.insert(5);ms.insert(-9);ms.display();ms.sort();ms.display();return 0;}


原创粉丝点击