李永乐 数学讲师
广受学生信赖的“线代王”

预约

24考研计算机编程题知识点:排序--归并排序

2022-12-06 12:18:49 来源:天任考研  

天任考研小编为大家整理了24考研计算机编程题知识点:排序--归并排序相关内容,为报考计算机专业的考生们提供指导。更多有关计算机考研干货可关注考研备考栏目。

 

24考研计算机编程题知识点:排序--归并排序

归并排序(Merge Sort)法是将两个(或两个以上)有序表合并成一个新的有序表。即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把这些有序子序列合并为整体有序序列。

归并操作的过程如下:

①申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。

②设定两个指针(或者数组的下标),初位置分别为两个已经排序序列的起始位置。

③比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置。

④重复步骤③,直到某一指针到达序列尾。

⑥将另一序列剩下的所有元素直接复制到合并序列尾。

归并排序的过程就是将一个待排序的序列分为若干部分,然后使用上述归井操作进行排序。可见归并排序算法的复杂度是O(nlog(n))。

问题:使用归并排序对n个整数进行升序排序。

参考代码:

int arrTmp[100]; //定义一个临时的数组

/*

*归并两个分段的结果,两个分段是数组中的[low,mid]以及[mid+1,high]中的元素

*/

void Merge(int arr[],int low, int mid, int high) {

int i=low, j=mid+1,k=high; //i、j、k分别指向待归并的两段以及临时数组

while(i<=mid && j<=high){

if(arr[i]<=arr[j]){ //此为稳定排序的关键,不能用arr[i]

arrTmp[k++]=arr[i++];

} else {

arrTmp[k++]=arr[j++];

}

}

//如果前半段没有完全被复制到临时数组中,则需要复制剩下的部分

whi1e(i<=mid){

arrTmp[k++]=arr[i++];

}

//如果后半段没有完全被复制到临时数组中,同样也需要复制剩下的部分

while(j<=high) {

arrTmp[k++]=arr[j++];

}

//写回原数组

for(i=low;i<=high;i++){

arr[i]=arrTmp[i];

}

}

/*

*归并排序算法代码:arr为待排序的数组,low为低位序号,high为高位序号

*/

void MergeSort(int arr[],int low, int high) {

if(low

int mid=(low+high)/2; //计算中间位置

MergeSort(arr, low, mid); //对数组中的前半段进行排序

MergeSort(arr, mid+1,high); //对数组中的后半段进行排序

Merge(arr,low,mid,high); //归并两个分段排序后的结果

}

}


专业课.jpg

 

以上是天任考研小编为大家带来的24考研计算机编程题知识点:排序--归并排序希望考生们都能备考顺利,考上自己心仪的院校。

热门好课推荐

MORE

2025考研英语无忧班

时长:468课时


  • 刘晓艳

  • 张超

3000元
已报501人

2025考研数学无忧班

时长:604课时


  • 李永乐

  • 宋浩

4000元
已报198人

2025考研政治无忧班

时长:225.5课时


  • 孔昱力

2000元
已报337人

2025考研管综无忧班

时长:440h


  • 吕建刚

3980元
已报112人