编译没错,但是运行到数组输出就不能进行下去了,请帮忙调试一下。
RT,我用的是vs2010
- C/C++ code
#include<stdio.h>#include<stdlib.h>void main(){ void merge(int a[],int k,int n); int a[10]={2,5,9,10,12,3,6,8,11,23}; printf("此数组为:\n"); for(int j=0;j<10;j++) printf("%d ",a[j]); printf("\n"); merge(a,5,10); for(int j=0;j<10;j++) printf("%d ",a[j]); printf("\n"); system("pause");}void merge(int a[],int k,int n){ int binarysearch(int a[],int x,int left,int right); void shiftright(int a[],int t,int s,int k); int i=0,j=k; while(i<k&&j<n) { int p=binarysearch(a,a[i],j,n-1); shiftright(a,p,i,p-j+1); j=p+1;i+=p-j+2; }}int binarysearch(int a[],int x,int left,int right){ int middle=0; while(left<=right) { if(x==a[middle]) return middle; else { if(x>a[middle]) left=middle+1; else right=middle-1; } } if(x<a[middle]) return middle-1; else return middle;}void shiftright(int a[],int t,int s,int k){ for(int i=0;i<k;i++) { int temp=a[t]; for(int j=t;j<s;j--) a[j]=a[j-1]; a[s]=temp; }}
[解决办法]
- C/C++ code
void merge(int a[],int k,int n){ int binarysearch(int a[],int x,int left,int right); void shiftright(int a[],int t,int s,int k); int i=0,j=k; while(i<k&&j<n) { int p=binarysearch(a,a[i],j,n-1); shiftright(a,p,i,p-j+1); j=p+1;i+=p-j+2; }}int binarysearch(int a[],int x,int left,int right){ int middle=(left+right)/2; while(left<=right) { if(x==a[middle]) return middle; else { if(x>a[middle]) left=middle+1; else right=middle-1; } middle=(left+right)/2; } if(x<a[middle]) return middle-1; else return middle;}void shiftright(int a[],int t,int s,int k){ for(int i=0;i<k;i++) { int temp=a[t]; for(int j=t;j<s;j--) a[j]=a[j-1]; a[s]=temp; }}int main(){ void merge(int a[],int k,int n); int a[10]={2,5,9,10,12,3,6,8,11,23}; printf("此数组为:\n"); for(int j=0;j<10;j++) printf("%d ",a[j]); printf("\n"); merge(a,5,10); for(int j=0;j<10;j++) printf("%d ",a[j]); printf("\n"); system("pause");}