归并排序
基本思想:将两个或两个以上的有序数列(或有序表),合并成一个有序数列,这个操作叫做归并操作。所以,将两个有序表合并成一个有序表,称为二路归并,同理,有三路归并,四路归并等等。
二路归并——例如:(7,10,13,15)和(4,8,19,20),归并后得到的有序表为(4,7,8,10,13,15,19,20),这就称作二路归并。
归并过程:设置i,j两个指针,比较a[i]和a[j]的大小,若a[i]<=a[j],则将第一个有序表中的元素复制到r[k]数组中。并将i和k指针向后移,分别加一。若a[i]>a[j],则将第二个有序表中的元素复制到r[k]数组中,并将j和k指针向后移,分别加一。知道其中一个有序表中的元素没有了,便将另一个有序表中剩下的元素复制进r数组中下标k到下标t的单元。
核心语句:
void guibing(int s,int m,int t) //将两个有序表a[s,m]和a[m+1,t]合并成一个有序表r[s,t]
{ //