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

Quick Sort & Binary Merge Sort

2016-05-01 20:44 316 查看
常用排序算法实现。

//快速排序实现,采用左开右闭区间 [start, end)
void quick_sort(vector<int> & arr, int start, int end){
if(end - start <= 1){
return;
}
int pivot = arr[start];
int i = start;
int j = end - 1;
while(i < j){
while(i < j && arr[j] > pivot)
j--;

while(i < j && arr[i] <= pivot)
i++;

if(i < j){
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
arr[start] = arr[i];
arr[i] = pivot;
quick_sort(arr, start, i);
quick_sort(arr, i+1, end);
}

//二路归并排序实现,采用左开右闭区间 [start, end)
void binary_merge_sort(vector<int> & arr, int start, int end){
if(end - start == 1)
return;
int mid = start + (end - start)/2;
binary_merge_sort(arr, start, mid);
binary_merge_sort(arr, mid, end);
vector<int>::iterator itStart = arr.begin() + start;
vector<int>::iterator itEnd = arr.begin() + end;
vector<int> ivBuf(itStart, itEnd);
int i = 0;
int j = mid - start;
int k = start;
while(i < mid-start && j < end-start){
if(ivBuf[i] < ivBuf[j]){
arr[k] = ivBuf[i];
i++;
}else{
arr[k] = ivBuf[j];
j++;
}
k++;
}
while(i < mid-start){
arr[k] = ivBuf[i];
i++;
k++;
}
while(j < end-start){
arr[k] = ivBuf[j];
j++;
k++;
}
}


测试验证代码。

void print_vector(vector<int> arr){
for(size_t i = 0; i < arr.size(); i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}

void pause(){
char ch;
cin>>ch;
}

int _tmain(int argc, _TCHAR* argv[])
{
vector<int> arr;

//1. Quick Sort Test
cout<<"Quick Sort Test:"<<endl;

arr.clear();
arr.push_back(5);
arr.push_back(3);
arr.push_back(8);
arr.push_back(6);
arr.push_back(4);
print_vector(arr);

quick_sort(arr, 0, arr.size());

print_vector(arr);

cout<<endl;

//2. Binary Merge Sort Test
cout<<"Quick Sort Test:"<<endl;
arr.clear();
arr.push_back(5);
arr.push_back(3);
arr.push_back(8);
arr.push_back(6);
arr.push_back(4);
print_vector(arr);

binary_merge_sort(arr, 0, arr.size());

print_vector(arr);

pause();

return 0;
}


如有Bug,欢迎留言交流!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: