排序算法--归并排序
#include<iostream>
using namespace std;
void print(int *arr,int length)
{
for(int i = 0;i < length;i++)
{
cout<<arr[i]<<"\t";
}
cout<<"\n";
}
void merge(int *arr1,int *arr2,int i,int m,int n)
{
for(int j = m + 1,k = i; i <=m && j <= n;k++)
{
if(arr1[i] < arr1[j])
{
arr2[k] = arr1[i++];
}
else
{
arr2[k] = arr1[j++];
}
}
if(i <= m)
{
for(;i <= m;i++)
{
arr2[k++] = arr1[i];
}
}
if(j <= n)
{
for(;j <= n;j++)
{
arr2[k++] = arr1[j];
}
}
}
void MergeSort(int sourceArr[], int targetArr[],int startIndex, int endIndex)
{
int midIndex;
int tempArr[4];
if(startIndex == endIndex)
{
targetArr[startIndex] = sourceArr[startIndex];
}
else
{
midIndex = (startIndex + endIndex)/2;
MergeSort(sourceArr, tempArr,startIndex, midIndex);
MergeSort(sourceArr, tempArr, midIndex+1, endIndex);
merge(tempArr, targetArr,startIndex, midIndex, endIndex);
}
}
int main()
{
int arr1[4] = {8,5,7,4};
int arr2[4];
int size = sizeof(arr1)/sizeof(int);
cout<<"排序前数组元素为:"<<endl;
print(arr1,size);
MergeSort(arr1,arr2,0,size-1);
cout<<"排序后数组元素为:"<<endl;
print(arr2,size);
return 0;
}

浙公网安备 33010602011771号