(1)第一种重新排列数组
//学习记录 #includeint main() { int array[10]={1,4,6,-1,-4,-6,0,3,6,-5} ; int array1[10]={0}; int j=0; for(int i=0;i<10;i++) //需要新建数组 { if(array[i]<0) { array1[j]=array[i]; j++; } } for(int k=0;k<10;k++) { if(array[k]==0) { array1[j]=array[k]; j++; } } for(int l=0;l<10;l++) { if(array[l]>0) { array1[j]=array[l]; j++; } } for(int i=0;i<10;i++) { printf("%d ",array1[i]); } }
(2)第二种重新排列数组
#includeint main() { int array[10]={1,4,6,-1,-4,-6,0,3,6,-5} ; int array1[10]={0}; int p=0,q=9,temp,i=0; //类似荷兰国旗问题 while(p!=q) { if(array[i]<0) { temp=array[p]; array[p]=array[i]; array[i]=temp; p++; } else if(array[i]>0) { temp=array[q]; array[q]=array[i]; array[i]=temp; q--; } i++; } for(int i=0;i<10;i++) { printf("%d ",array[i]); } return 0; }
(3)第二种重新排列数组,并按照大小排列同时打印每次变换。
#includeint main() { int array[10]={1,4,6,-1,-4,-6,0,3,6,-5} ; int p=0,q=9,ch,temp; while(p<=q) { int ch=p; if(array[ch]==0) ch++; if(array[ch]<0) { temp=array[p]; //负数移到右标记处 array[p]=array[ch]; array[ch]=temp; int P=p; printf(" 移动 ",p,q,ch); //说明 for(int l=0;l<10;l++) { printf("%d ",array[l]); } printf("n"); while(P-1>=0) { if(array[P] 0) { temp=array[q]; //正数移到右标记处 array[q]=array[ch]; array[ch]=temp; printf(" 移动 ",p,q,ch); for(int l=0;l<10;l++) { printf("%d ",array[l]); } printf("n"); int Q=q; while(Q+1<=9) { if(array[Q]>array[Q+1]) { temp=array[Q]; array[Q]=array[Q+1]; array[Q+1]=temp; printf("正数排序 ",p,q,ch); for(int l=0;l<10;l++) { printf("%d ",array[l]); } printf("n"); Q++; } else break; } q--; //q右面的已经有序 } } return 0; }



