归并排序的原理:
(1)首先,把一个数组以中间元素为界限分成两组;
(2)然后“左边数组”和“右边数组”中的元素分别进行比较;
(3)最后合并两个已经排好顺序的数组,我们称之为归并排序。
#include <iostream>
#include <stdlib.h>
using namespace std;
/*******************************************/
/* 归并排序
/******************************************/
void Merge(int array[], int left, int mid, int right, int temp[]) //合并
{
int i = left; //左数组的下标array[i]{left ... mid}
int j = mid + 1; //右数组的下标array[j]{mid+1 ... right}
int k = 0; //k是temp数组的下标
while (i <= mid && j <= right)
{
if (array[i] <= array[j])
{
temp[k++] = array[i++];
}
else
{
temp[k++] = array[j++];
}
}
while (i <= mid) //把剩余的元素放到temp数组中
{
temp[k++] = array[i++];
}
while (j <= right) //把剩余的元素放到temp数组中
{
temp[k++] = array[j++];
}
for (i = 0; i < k; i++) //更新原始数组元素
{
array[left + i] = temp[i];
}
}
void MergeSort(int array[], int left, int right, int temp[]) //归并排序函数
{
if (left < right)
{
int mid = (left + right) / 2;
MergeSort(array, left, mid, temp); //左边归并排序,使得左数组有序
MergeSort(array, mid + 1, right, temp); //右边归并排序,使得右数组有序
Merge(array, left, mid, right, temp); //将左、右有序的数组进行合并
}
}
int main(void) //主程序
{
const int n = 6; //数组元素的数量
int array[n];
int temp[n];
cout << "请输入6个整数:" << endl;
for (int i = 0; i < n; i++)
{
cin >> array[i];
}
cout << endl; //换行
MergeSort(array, 0, n - 1, temp); // 调用MergeSort函数 进行合并
cout << "由小到大的顺序排列后:" << endl;
for (int i = 0; i < n; i++)
{
cout << "Array" << "[" << i << "]" << " = " << temp[i] << endl;
}
cout << endl << endl; //换行
system("pause"); //调试时,黑窗口不会闪退,一直保持
return 0;
}
运行结果:

3971



被折叠的 条评论
为什么被折叠?



