归并排序是一种效率较高的排序方法,它分为拆分和合并两大部分,先拆后合。
拆分,就是将一堆无序的数拆成单个,方便合并。
合并,就是将拆分好的数按照排序规则再拼凑起来。
详细解释请看下图:
拆分:
合并:
看完这两幅图你应该明白了,归并排序原来就是将一堆数字分开,再合成有序的数列
其实,这就是分治的思想,将大问题化小问题,将每个最小的问题处理好,合并起来大问题也就处理好了~
#include <iostream>
using namespace std;
void mergeArray(int data[], int low, int mid, int high, int temp[])
{
int i = low;
int j = mid + 1;
int count = 0;
while((i <= mid) && (j <= high))
{
if(data[i] < data[j])
temp[count++] = data[i++];
else
temp[count++] = data[j++];
}
while(i<=mid)
temp[count++] = data[i++];
while(j<=high)
temp[count++] = data[j++];
for(int i = 0; i < count; i++)
data[low + i] = temp[i];
}
void mergeSort(int data[], int start, int end, int temp[])
{
if(start >= end)
return;
int mid = (start+end)/2;
mergeSort(data, start, mid, temp);
mergeSort(data, mid+1, end, temp);
mergeArray(data, start, mid, end, temp);
}
int main() {
int a[10] = {1,5,4,3,7,6,9,10,8,2};
int temp[10] = {0};
mergeSort(a, 0, 9, temp);
for(int i = 0; i < 10; i++)
cout << a[i] << endl;
return 0;
}