代码对比 归并 😎💻

导读 在编程的世界里,归并排序是一种非常经典的算法,它将一个数组分成两个子数组,分别进行排序,然后合并成一个有序数组。这个过程不仅体现了...

在编程的世界里,归并排序是一种非常经典的算法,它将一个数组分成两个子数组,分别进行排序,然后合并成一个有序数组。这个过程不仅体现了分治法的思想,还展示了算法设计中的精妙之处。今天,我们就来通过代码对比的方式,看看不同编程语言中如何实现归并排序吧!

Python 示例 🐍

```python

def merge_sort(arr):

if len(arr) > 1:

mid = len(arr) // 2

left_half = arr[:mid]

right_half = arr[mid:]

merge_sort(left_half)

merge_sort(right_half)

i = j = k = 0

while i < len(left_half) and j < len(right_half):

if left_half[i] < right_half[j]:

arr[k] = left_half[i]

i += 1

else:

arr[k] = right_half[j]

j += 1

k += 1

while i < len(left_half):

arr[k] = left_half[i]

i += 1

k += 1

while j < len(right_half):

arr[k] = right_half[j]

j += 1

k += 1

示例用法

arr = [12, 11, 13, 5, 6, 7]

merge_sort(arr)

print("Sorted array is:", arr)

```

Java 示例 🐱‍💻

```java

public class MergeSort {

public static void mergeSort(int[] arr, int l, int r) {

if (l < r) {

int m = (l + r) / 2;

mergeSort(arr, l, m);

mergeSort(arr, m + 1, r);

merge(arr, l, m, r);

}

}

private static void merge(int[] arr, int l, int m, int r) {

int n1 = m - l + 1;

int n2 = r - m;

int[] L = new int[n1];

int[] R = new int[n2];

for (int i = 0; i < n1; ++i)

L[i] = arr[l + i];

for (int j = 0; j < n2; ++j)

R[j] = arr[m + 1 + j];

int i = 0, j = 0;

int 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++;

}

}

public static void main(String args[]) {

int[] arr = {12, 11, 13, 5, 6, 7};

mergeSort(arr, 0, arr.length - 1);

System.out.println("Sorted array is: " + Arrays.toString(arr));

}

}

```

通过这两种不同语言的实现方式,我们可以看到归并排序的核心思想是相同的:分而治之。不同的是语法和细节处理上的差异。希望这些示例能够帮助你更好地理解归并排序算法!🚀

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,多谢。