归并算法速度比较快,但也难理解,我用很详细的叙述将 整个过程给模拟了出来
实现如下:
/*
Filename:mergeSort.cpp
Author: xiaobing
E-mail: xiaobingzhang29@gmail.com
Date: 2013-08-27
*/
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#define N 10
using namespace std;
/*
*归并排序:
归并排序的思想是合并两个已经有序的序列为一个大的有序的序列
首先,进行分组,一分为二,二分为四,依次下去,最终的状态是
全部分组为一个元素,然后向上开始和并分组,四个合并为两个,
二个合并为一个,最终在合并的过程中将顺序排好了,具体如下:
当合并的时候,有两个指针,i,j分别指向分组的第一个元素,分
陪一个与数组同样大小的数组temp,定义一个k用于遍历数组temp,
k指向两个分组中的最低的位置,即合并分组传入的开始位置,然后
分别用指针i和j开始比较第一个分组和第二个分组元素的大小,选择
小的元素存入temp,同时k增1,在小的元素的那个分组的指针增1,直到
其中一个分组的元素全部完毕为止,然后把另一个剩下的元素存入temp
中,k和剩下元素自增。
这样,temp中就把两个分组的元素排好顺序了,接着,将这些数据对应
原数组的为止写入,达到局部有序了,经过从小的分组 不断合并,最终
整个数组就是排序排好的了。
*/
int