排序算法-合并排序

说明

      之前所介绍的排序法都是在同一个阵列中的排序,考虑今日有两笔或两笔以上的资料,它可能是不同阵列中的资料,或是不同档案中的资料,如何为它们进行排序?
解法

      可以使用合并排序法,合并排序法基本是将两笔已排序的资料合并并进行排序,如果所读入的资料尚未排序,可以先利用其它的排序方式来处理这两笔资料,然后再将排序好的这两笔资料合并。有人问道,如果两笔资料本身就无排序顺序,何不将所有的资料读入,再一次进行排序?排序的精神是尽量利用资料已排序的部份,来加快排序的效率,小笔资料的排序较为快速,如果小笔资料排序完成之后,再合并处理时,因为两笔资料都有排序了,所有在合并排序时会比单纯读入所有的资料再一次排序来的有效率。
      那么可不可以直接使用合并排序法本身来处理整个排序的动作?而不动用到其它的排序方式?
      答案是肯定的,只要将所有的数字不断的分为两个等分,直到最后剩一个数字为止,然后再反过来不断的合并,就如下图所示:

 

      不过基本上分割又会花去额外的时间,不如使用其它较好的排序法来排序小笔资料,再使用合并排序来的有效率。下面的程序范例,使用的是快速排序法来处理小笔资料排序,然后再使用合并排序法处理合并的动作。  

      代码:

//这个快速排序法的概念,它以最右边的值s作比较的标准,将整个数列分为三个部份,
//一个是小于s的部份,一个是大于s的部份,一个是未处理的部份

int partition(int number[],int left, int right) //寻找轴所在的正确位置
{
	int i,j,s;
	int temp;
	s = number[right];
	i = left - 1;
	j = left;
	for(j=left;j


 

你可能感兴趣的:(排序算法)