#include<iostream>
using namespace std;
void printArray(int* array, int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << '\t';
}
}
void MergeSort_Cir(int array[], int temp[], int start, int end)
{
if (start >= end)
return;
int len = end - start;
int mid = len / 2 + start; // 递归边界,注意控制
int start1 = start;
int end1 = mid;
int start2 = mid + 1;
int end2 = end;
MergeSort_Cir(array, temp, start1, end1);
MergeSort_Cir(array, temp, start2, end2);
int k = start;// 为了最后循环打印,start 不变化
while (start1 <= end1 && start2 <= end2)
temp[k++] = array[start1] < array[start2] ? array[start1++] : array[start2++];// 没选择的那一个不会执行++
while (start1 <= end1)
temp[k++] = array[start1++];
while (start2 <= end2)
temp[k++] = array[start2++];// 一组移完后没移完的移过去
for (int i = start; i <= end; i++)// 比较完后移回原来数组,比几位移动几位,最后一次返回的array的是正确排序
{
array[i] = temp[i];
}
}
void MergeSort(int* array, int len)
{
int* temp = (int*)malloc(len * sizeof(int));
MergeSort_Cir(array,temp,0,len - 1);
}
int main()
{
int array[] = { 3,13,43,23,65,23,1,9,15,8 };
int len = sizeof(array) / sizeof(int);
printArray(array, len);
cout << '\n';
MergeSort(array,len);
printArray(array, len);
return 0;
}
归并排序
最新推荐文章于 2024-07-25 21:13:04 发布