#include <stdio.h> #include <stdlib.h> #define SORT_NUM 20 void print_array(int *list, int len); void merge_array(int *list1, int list1_size, int *list2, int list2_size); void merge_sort(int *list, int list_size) { if (list_size > 1) { int *list1 = list; int list1_size = list_size / 2; int *list2 = list + list_size / 2; int list2_size = list_size - list1_size; merge_sort(list1, list1_size); merge_sort(list2, list2_size); merge_array(list1, list1_size, list2, list2_size); } } void merge_array(int *list1, int list1_size, int *list2, int list2_size) { int i, j, k; i = j = k = 0; int ii = 0; int list[list1_size + list2_size]; while (i < list1_size && j < list2_size) { list[k++] = list1[i] < list2[j] ? list1[i++] : list2[j++]; } while (i < list1_size) { list[k++] = list1[i++]; } while (j < list2_size) { list[k++] = list2[j++]; } for (ii = 0; ii < (list1_size + list2_size); ++ii) { list1[ii] = list[ii]; } } void print_array(int *list, int len) { int i; for (i = 0; i < len; ++i) { printf("%3d", list[i]); if (i < len - 1) printf(" "); } printf("\n"); } int main(void) { int len = SORT_NUM; int list[len]; int i = 0; srand(time(0)+getpid()); for (i = 0; i < len; ++i) { list[i] = rand() % (SORT_NUM * SORT_NUM); } print_array(list, len); merge_sort(list, len); print_array(list, len); return 0; }
參考wiki,做個備份
http://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
code位置
https://drive.google.com/file/d/0B8hm-I2M8BD7N1drQTNhYWJHaEE/edit?usp=sharing
沒有留言:
張貼留言