C语言实现归并排序算法的攻略如下:
展示归并排序算法思路
- 先将待排序的序列拆分成若干小规模子序列,直到每个子序列可以直接排序为止。
- 然后对每个子序列进行排序,合并成新的有序序列。
- 重复第二步,直到只剩下一个排序完毕的序列。
C语言代码实现
下面是一份C语言实现归并排序算法的代码,代码内部有详细的注释,可以帮助理解代码:
#include <stdio.h>
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = l+(r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
}
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int n = sizeof(arr)/sizeof(arr[0]);
printf("Original array:\n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
mergeSort(arr, 0, n - 1);
printf("\nSorted array:\n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
示例说明
下面是两个排序示例:
示例1:
原数组: {55, 23, 26, 2, 55, 15}。
- 将原数组分成两个子序列:{55, 23, 26}和{2, 55, 15}。
- 对子序列{55, 23, 26}进行排序,得到{23, 26, 55}。
- 对子序列{2, 55, 15}进行排序,得到{2, 15, 55}。
- 将两个排序后的子序列合并,得到新的有序序列{2, 15, 23, 26, 55, 55}。
示例2:
原数组:{10, 15, 12, 13, 7, 11}。
- 将原数组分成两个子序列:{10, 15, 12}和{13, 7, 11}。
- 对子序列{10, 15, 12}进行排序,得到{10, 12, 15}。
- 对子序列{13, 7, 11}进行排序,得到{7, 11, 13}。
- 将两个排序后的子序列合并,得到新的有序序列{7, 10, 11, 12, 13, 15}。
以上就是C语言实现归并排序算法的完整攻略和两个示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 实现归并排序算法 - Python技术站