归并排序代码(归并排序代码c语言)

# 归并排序代码## 简介归并排序(Merge Sort)是一种经典的分而治之算法,它通过将数据分成小块来逐步解决问题,然后将结果合并以获得最终答案。归并排序以其稳定性和高效的性能闻名,尤其适用于大规模数据的排序任务。它的时间复杂度为O(n log n),并且在最坏情况下也能保持这一效率。本文将详细介绍归并排序的基本原理,并提供多种编程语言的实现代码。---## 归并排序的基本原理归并排序的核心思想是将数组分成两半,递归地对每一半进行排序,然后再将两个有序的部分合并成一个整体。其主要步骤包括:1.

分解

:将数组分为左右两部分。 2.

递归排序

:分别对左右两部分进行排序。 3.

合并

:将排序后的两部分合并成一个有序数组。归并排序是一个稳定的排序算法,适合处理链表等数据结构。---## Python 实现代码```python def merge_sort(arr):# 如果数组长度小于等于1,则无需排序if len(arr) <= 1:return arr# 分解数组mid = len(arr) // 2left_half = merge_sort(arr[:mid])right_half = merge_sort(arr[mid:])# 合并有序数组return merge(left_half, right_half)def merge(left, right):sorted_arr = []while left and right:if left[0] < right[0]:sorted_arr.append(left.pop(0))else:sorted_arr.append(right.pop(0))# 将剩余元素添加到结果中sorted_arr.extend(left or right)return sorted_arr# 测试代码 if __name__ == "__main__":test_array = [38, 27, 43, 3, 9, 82, 10]print("原始数组:", test_array)sorted_array = merge_sort(test_array)print("排序后数组:", sorted_array) ```---## Java 实现代码```java public class MergeSort {public static void main(String[] args) {int[] array = {38, 27, 43, 3, 9, 82, 10};System.out.println("原始数组:");printArray(array);mergeSort(array, 0, array.length - 1);System.out.println("排序后数组:");printArray(array);}// 归并排序主函数public static void mergeSort(int[] arr, int left, int right) {if (left < right) {int mid = (left + right) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right);}}// 合并两个有序子数组public static void merge(int[] arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;int[] L = new int[n1];int[] R = new int[n2];for (int i = 0; i < n1; ++i)L[i] = arr[left + i];for (int j = 0; j < n2; ++j)R[j] = arr[mid + 1 + j];int i = 0, j = 0;int k = left;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++;}}// 打印数组public static void printArray(int[] arr) {for (int value : arr) {System.out.print(value + " ");}System.out.println();} } ```---## C++ 实现代码```cpp #include using namespace std;void merge(int arr[], int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;int L[n1], R[n2];for (int i = 0; i < n1; i++)L[i] = arr[left + i];for (int j = 0; j < n2; j++)R[j] = arr[mid + 1 + j];int i = 0, j = 0, k = left;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 left, int right) {if (left >= right)return;int mid = left + (right - left) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right); }void printArray(int A[], int size) {for (int i = 0; i < size; i++)cout << A[i] << " ";cout << endl; }int main() {int arr[] = {38, 27, 43, 3, 9, 82, 10};int arr_size = sizeof(arr) / sizeof(arr[0]);cout << "原始数组: \n";printArray(arr, arr_size);mergeSort(arr, 0, arr_size - 1);cout << "排序后数组: \n";printArray(arr, arr_size);return 0; } ```---## 总结归并排序是一种高效且稳定的排序算法,其核心在于“分而治之”的思想。本文通过Python、Java和C++三种主流编程语言展示了归并排序的具体实现。无论是处理小规模还是大规模数据集,归并排序都表现出了良好的性能。希望读者通过本文能够深入理解归并排序的工作机制,并能够在实际项目中灵活运用这一算法。

归并排序代码

简介归并排序(Merge Sort)是一种经典的分而治之算法,它通过将数据分成小块来逐步解决问题,然后将结果合并以获得最终答案。归并排序以其稳定性和高效的性能闻名,尤其适用于大规模数据的排序任务。它的时间复杂度为O(n log n),并且在最坏情况下也能保持这一效率。本文将详细介绍归并排序的基本原理,并提供多种编程语言的实现代码。---

归并排序的基本原理归并排序的核心思想是将数组分成两半,递归地对每一半进行排序,然后再将两个有序的部分合并成一个整体。其主要步骤包括:1. **分解**:将数组分为左右两部分。 2. **递归排序**:分别对左右两部分进行排序。 3. **合并**:将排序后的两部分合并成一个有序数组。归并排序是一个稳定的排序算法,适合处理链表等数据结构。---

Python 实现代码```python def merge_sort(arr):

如果数组长度小于等于1,则无需排序if len(arr) <= 1:return arr

分解数组mid = len(arr) // 2left_half = merge_sort(arr[:mid])right_half = merge_sort(arr[mid:])

合并有序数组return merge(left_half, right_half)def merge(left, right):sorted_arr = []while left and right:if left[0] < right[0]:sorted_arr.append(left.pop(0))else:sorted_arr.append(right.pop(0))

将剩余元素添加到结果中sorted_arr.extend(left or right)return sorted_arr

测试代码 if __name__ == "__main__":test_array = [38, 27, 43, 3, 9, 82, 10]print("原始数组:", test_array)sorted_array = merge_sort(test_array)print("排序后数组:", sorted_array) ```---

Java 实现代码```java public class MergeSort {public static void main(String[] args) {int[] array = {38, 27, 43, 3, 9, 82, 10};System.out.println("原始数组:");printArray(array);mergeSort(array, 0, array.length - 1);System.out.println("排序后数组:");printArray(array);}// 归并排序主函数public static void mergeSort(int[] arr, int left, int right) {if (left < right) {int mid = (left + right) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right);}}// 合并两个有序子数组public static void merge(int[] arr, int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;int[] L = new int[n1];int[] R = new int[n2];for (int i = 0; i < n1; ++i)L[i] = arr[left + i];for (int j = 0; j < n2; ++j)R[j] = arr[mid + 1 + j];int i = 0, j = 0;int k = left;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++;}}// 打印数组public static void printArray(int[] arr) {for (int value : arr) {System.out.print(value + " ");}System.out.println();} } ```---

C++ 实现代码```cpp

include using namespace std;void merge(int arr[], int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;int L[n1], R[n2];for (int i = 0; i < n1; i++)L[i] = arr[left + i];for (int j = 0; j < n2; j++)R[j] = arr[mid + 1 + j];int i = 0, j = 0, k = left;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 left, int right) {if (left >= right)return;int mid = left + (right - left) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid + 1, right);merge(arr, left, mid, right); }void printArray(int A[], int size) {for (int i = 0; i < size; i++)cout << A[i] << " ";cout << endl; }int main() {int arr[] = {38, 27, 43, 3, 9, 82, 10};int arr_size = sizeof(arr) / sizeof(arr[0]);cout << "原始数组: \n";printArray(arr, arr_size);mergeSort(arr, 0, arr_size - 1);cout << "排序后数组: \n";printArray(arr, arr_size);return 0; } ```---

总结归并排序是一种高效且稳定的排序算法,其核心在于“分而治之”的思想。本文通过Python、Java和C++三种主流编程语言展示了归并排序的具体实现。无论是处理小规模还是大规模数据集,归并排序都表现出了良好的性能。希望读者通过本文能够深入理解归并排序的工作机制,并能够在实际项目中灵活运用这一算法。

标签列表