diff --git a/归并排序.cpp b/归并排序.cpp new file mode 100644 index 0000000..3a80747 --- /dev/null +++ b/归并排序.cpp @@ -0,0 +1,65 @@ +7.3 代码 +#include +#include +#include +#define ArrLen 20 +void printList(int arr[], int len) +{ + int i; + for (i = 0; i < len; i++) + { + printf("%d\t", arr[i]); + } +} +void merge(int arr[], int start, int mid, int end) +{ + int result[ArrLen]; + int k = 0; + int i = start; + int j = mid + 1; + while (i <= mid && j <= end) + { + if (arr[i] < arr[j]) + { + result[k++] = arr[i++]; + } + else{ + result[k++] = arr[j++]; + } + } + if (i == mid + 1) + { + while(j <= end) + result[k++] = arr[j++]; + } + if (j == end + 1) + { + while (i <= mid) + result[k++] = arr[i++]; + } + for (j = 0, i = start ; j < k; i++, j++) + { + arr[i] = result[j]; + } +} + +void mergeSort(int arr[], int start, int end) +{ + if (start >= end) + return; + int mid = ( start + end ) / 2; + mergeSort(arr, start, mid); + mergeSort(arr, mid + 1, end); + merge(arr, start, mid, end); +} + +int main() +{ + int arr[] = {22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70}; + mergeSort(arr, 0, 13); + printList(arr, 14); + return 0; +} + +7.4 运行时间 +0.02142s \ No newline at end of file