/************************************************************************* > File Name: merge_sort.c > Author:qusijun > Mail: wiilen.lian@gmail.com > Created Time: 2013年11月09日 星期六 12时29分03秒 ************************************************************************/ #include<stdio.h> int auxi_array[100] = {0}; int to_sort[10] = {9,2,1,5,10,3,8,2,5,1}; void merge(int *a,int *b,int left,int mid,int right) { int s1 = left; int e1 = mid; int s2 = mid+1; int e2 = right; int k = left; while(s1<=e1&&s2<=e2) { if (a[s1]<a[s2]) b[k++] =a[s1++]; else b[k++] = a[s2++]; } while (s1<=mid) { b[k++] = a[s1++]; } while(s2<=left) { b[k++] = a[s2++]; } k--; while (k>=left) { a[k] = b[k]; k--; } } void merge_sort(int *a,int *b,int left,int right) { if (left<right) { int mid = (left+right)/2; merge_sort(a,b,left,mid); merge_sort(a,b,mid+1,right); merge(a,b,left,mid,right); } // return; } int main() { int i; for (i=0;i<10;i++) { printf("%d,",to_sort[i]); } merge_sort(to_sort,auxi_array,0,9); printf(" --------------------------merge_sort--------------------------- "); for (i = 0;i<10;i++) { printf("%d,",to_sort[i]); } return 0; }