大家好,我是贤弟!
一、什么是归并排序?
归并排序(Merge Sort)是一种分治思想的算法,其核心思想是将待排序数组不断划分为更小的子问题,并对子问题进行排序和合并,最终达到整个序列有序的目的。
二、归并排序的具体步骤
具体实现步骤如下:
1、将待排序数组从中间位置分为两个子序列,直到每个子序列仅剩一个元素为止。
2、对左、右子序列分别递归地进行排序,直到所有子序列均已有序。
3、将两个有序的子序列合并成一个有序的序列。
三、代码示例
C语言实现代码如下:
#include
void merge(int arr[], int left, int mid, int right) { int i = left; int j = mid + 1; int k = 0; int tmp[right - left + 1];
while (i if (arr[i] < arr[j]) { tmp[k] = arr[i]; k++; i++; } else { tmp[k] = arr[j]; k++; j++; } }
while (i tmp[k] = arr[i]; k++; i++; }
while (j tmp[k] = arr[j]; k++; j++; }
for (int l = 0; l < k; l++) { arr[left + l] = tmp[l]; }}
void mergeSort(int arr[], int left, int right) { if (left >= right) { return; }
int mid = (left + right) / 2;
mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);}
int main() { int arr[] = {6, 5, 3, 1, 8, 7, 2, 4}; int n = sizeof(arr) / sizeof(int);
mergeSort(arr, 0, n - 1);
for (int i = 0; i < n; i++) { printf("%d ", arr[i]); }
return 0;}
输出结果:
领取专属 10元无门槛券
私享最新 技术干货