C语言二分法排序代码怎么写

寻技术 C/C++编程 6小时前 5

下面是一个使用二分法排序的C语言代码示例:

#include <stdio.h> // 二分法排序 void binarySort(int arr[], int low, int high) { if (low < high) { int mid = (low + high) / 2; // 对左半部分进行排序 binarySort(arr, low, mid); // 对右半部分进行排序 binarySort(arr, mid + 1, high); // 合并两个有序数组 merge(arr, low, mid, high); } } // 合并两个有序数组 void merge(int arr[], int low, int mid, int high) { int i, j, k; int n1 = mid - low + 1; int n2 = high - mid; // 创建临时数组 int L[n1], R[n2]; // 将数据复制到临时数组 for (i = 0; i < n1; i++) { L[i] = arr[low + i]; } for (j = 0; j < n2; j++) { R[j] = arr[mid + 1 + j]; } // 合并临时数组到原数组 i = 0; j = 0; k = low; 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++; } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); printf("排序前的数组:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } binarySort(arr, 0, n - 1); printf("\n排序后的数组:"); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }

以上代码定义了一个 binarySort 函数来执行二分法排序。该函数使用递归调用来将数组划分为更小的部分,并调用 merge 函数来合并这些部分。

merge 函数将两个有序数组合并到一个有序数组中。它首先创建两个临时数组 LR 来存储划分后的数组。然后,它将 LR 中的元素按照从小到大的顺序复制回原数组。

main 函数中,我们定义了一个测试数组并调用 binarySort 函数来排序该数组。最后,我们打印出排序后的数组。

关闭

用微信“扫一扫”