看懂了这段代码,就真的理解了归并排序。
#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++];
else
tmp_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;
}