#include <iostream>
void mergePartition(int alist[],int temp_list[],int as, int ae, int bs, int be);
void mergeSort(int alist[],int start_index,int end_index)
{
if(start_index >= end_index)
{
return;
}
int middle_index = (start_index + end_index) / 2;
mergeSort(alist,start_index,middle_index);
mergeSort(alist,middle_index + 1, end_index);
int temp_list[10];
memset(temp_list,0,sizeof(temp_list));
mergePartition(alist,temp_list,start_index,middle_index,middle_index+1,end_index);
}
void mergePartition(int alist[],int temp_list[],int as, int ae, int bs, int be)
{
if(as > ae || bs > be || ae >bs)
{
return;
}
int privior_index = as;
int current_index = 0;
while(as <= ae && bs <= be)
{
if(alist[as] < alist[bs])
{
temp_list[current_index] = alist[as];
as++;
current_index++;
}
else
{
temp_list[current_index] = alist[bs];
bs++;
current_index++;
}
}
while(as <= ae)
{
temp_list[current_index] = alist[as];
as++;
current_index++;
}
while(bs <= be)
{
temp_list[current_index] = alist[bs];
bs++;
current_index++;
}
for(int i =0; i<current_index;i++)
{
alist[privior_index++] = temp_list[i];
}
}
int main()
{
int a[10] = {9,0,6,8,2,1,5,7,4,3};
mergeSort(a,0,9);
for(int i =0; i<10; i++)
{
std::cout<<a[i] <<" ";
}
std::cout<<std::endl;
}
二路并归排序
最新推荐文章于 2022-04-12 21:50:03 发布