归并排序

来源:互联网 发布:java中实现多线程开发 编辑:程序博客网 时间:2024/06/03 20:34
#include <stdio.h>void merge_array(int arr[],int begin, int mid, int end);void print_array(int arr[], int len);void merge_sort(int arr[], int begin, int end);void main(void){int array[8] = {2, 5, 4, 7, 1, 3, 2, 6};merge_sort(array, 1, 8);print_array(array, 8);   }void merge_array(int arr[], int begin, int mid, int end){int i, j, k;int left_arr_len = mid - begin + 1;int right_arr_len = end - mid;int left_array[left_arr_len + 1];int right_array[right_arr_len + 1];for (i = 0; i < left_arr_len; i++){left_array[i] = arr[begin+i-1];}for (j = 0; j < right_arr_len; j++){right_array[j] = arr[mid+j];}left_array[left_arr_len] = 1000;right_array[right_arr_len] = 1000;for (k = begin, i = 0, j = 0; k < end+1; k++){if (left_array[i] <= right_array[j]){arr[k-1] = left_array[i];i++;}else{arr[k-1] = right_array[j];j++;}} }void merge_sort(int arr[], int begin, int end){int mid;if (begin < end){mid = (begin + end) / 2;merge_sort(arr, begin, mid);merge_sort(arr, mid + 1, end);merge_array(arr, begin, mid, end);}    }void print_array(int arr[], int len){int i;for (i = 0; i < len; i++){printf("%d ", arr[i]);}printf("\n");}


 

原创粉丝点击