intmain(){ int a[]={2,6,4,8,12,56,88,65,14,22}; int high = sizeof(a)/sizeof(a[0]); printf("排序前\n"); for (int i=0;i<high;i++){ printf("%d\t",a[i]); } printf("\n"); merge_sort(a,0,high-1); printf("排序后\n"); for (int i=0;i<high;i++){ printf("%d\t",a[i]); } system("pause"); return0;
}
voidmerge(int *a,int low ,int mid ,int high){ int i = low; int j = mid + 1; int *copya = (int *)malloc((high-low+1)*sizeof(int)); int p = 0; while ( i<=mid && j<=high){ if ( a[i]>a[j]){ copya[p++] = a[j++]; }else{ copya[p++] = a[i++]; } } // while (i<=mid){ copya[p++] = a[i++]; } while (j<=high){ copya[p++] = a[j++]; } for (int k = 0;k<high-low+1;k++){ a[k+low] = copya[k]; } //memcpy(a + low, copya + low, sizeof(int)*(high - low+1)); // free(copya); return; }
voidmerge_sort(int *a,int low,int high){ if (low < high ){ int mid = (low+high)/2; merge_sort(a,low,mid); merge_sort(a,mid+1,high); merge(a,low,mid,high); /* for (int i=low;i<high+1;i++){ printf("%d\t",a[i]); } printf("\n"); */ }
}
我遇到的问题
在归并,把copya的值赋回给a的时候最开始:
1 2 3
for (int k = 0;k<high-low+1;k++){ a[k] = copya[k]; }