C语言归并排序
归并:两两合并排序再合并。涉及三个操作:两两合并、排序、再合并。 该算法是采用分治法的一个非常典型的应用,且各层分治递归可以同时进行。 对于一个无序的长序列,可以分解为很多个有序的子序列,然后依次进行归并。我们把原始长序列依次分解,直到每个子序列都只有一个元素的时候,再依次把所有的序列进行归并排序,直到合并成一个序列。 下面呢,举个例子:{2,6,5,7,4,1,8,3} 1.{2,6,5,7},{4,1,8,3} (将原始序列从中间分为左、右两个子序列) 2.{2,6},{5,7},{4,1},{8,3} (将左序列和右序列再分别从中间分为左、右两个子序列) 3.{2},{6},{5},{7},{4},{1},{8},{3} (重复以上步骤,直到每个子序列都只有一个元素,可认为每一个子序列都是有序的) 以上三步为“分” 接下来,进行两两合并,排序,再合并,再排序 1.{2,6},{5,7},{1,4},{3,8} 2.{2,5,6,7},{1,3,4,8} 3.{1,2,3,4,5,6,7,8} 归并排序完成 归并排序的代码 Merge函数:将一个无序的序列进行分解(分解到每个序列只有1个元素为止) prx函数:排序 void merge ( int a [ ] , int l , int r ) //a数组为序列,l为序列的第一个元素位置,r为最后一个元素位置 { if ( l