c语言分治法实现合并排序算法
在计算机科学中,分治算法是一种将问题划分为较小子问题,然后将结果合并以解决原始问题的算法。其中,合并排序算法就是一种常见的分治算法。
C语言可以使用分治法实现合并排序算法。该算法的基本思想是将原始数组递归地分成两半,直到每个部分只有一个元素,然后将这些部分合并起来,直到形成一个完整的已排序的数组。
具体实现过程如下:
1.首先,定义一个函数merge,该函数将两个已排序的数组合并成一个已排序的数组。
2.然后,定义一个函数merge_sort,该函数使用递归的方式将原始数组分成两个部分,并对每个部分调用merge_sort函数以进行排序。
3.最后,将已排序的两个数组合并到一起,使用merge函数。
以下是C语言代码:
void merge(int arr[], int left[], int left_count, int right[], int right_count) {
merge函数 int i = 0, j = 0, k = 0;
while (i < left_count && j < right_count) {
if (left[i] < right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
while (i < left_count) {
arr[k++] = left[i++];
}
while (j < right_count) {
arr[k++] = right[j++];
}
}
void merge_sort(int arr[], int size) {
if (size < 2) {
return;
}
int mid = size / 2;
int left[mid];
int right[size - mid];
for (int i = 0; i < mid; i++) {
left[i] = arr[i];
}
for (int i = mid; i < size; i++) {
right[i - mid] = arr[i];
}
merge_sort(left, mid);
merge_sort(right, size - mid);
merge(arr, left, mid, right, size - mid);
}
int main() {
int arr[] = {3, 8, 1, 6, 9, 4, 5, 7, 2};
int size = sizeof(arr) / sizeof(arr[0]);
merge_sort(arr, size);
for (int i = 0; i < size; i++) {
printf('%d ', arr[i]);
}
return 0;
}
以上代码可以将数组{3, 8, 1, 6, 9, 4, 5, 7, 2}排序成{1, 2, 3, 4, 5, 6, 7, 8, 9}。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论