#include <stdio.h> int main() { int n,insert; int mid; int a[50]; int l,r; scanf("%d",&n); l = 0; r = n-1; for(int i = 0 ;i < n; i++) { scanf("%d",&a[i]); } scanf("%d",&insert); int k =0; ///////////////////////////////////////////// if(insert > a[n-1]) { a[n] = insert; } ////////////////////////////////////////// if(insert < a[0]) { for(int i = n ; i>0 ; i--) { a[i] = a[i-1]; } a[0] = insert; } //////////////////////////////////////////// if(insert > a[0] && insert < a[n-1]) { while(l<=r) { mid = (l+r)/2; if(a[mid] == insert) break; if(a[mid] < insert) { l = mid +1; } if(a[mid] > insert) { r = mid -1; } } //mid的值有两种情况:1、mid = n 。2、l>r n = l占位,后面的全部像后面挪动. if(l<=r) { // a[n] = a[n-1] // a[n-1] = a[n-1-1] // a[n-1-1] = a[n-1-1-1] while(n-1 != mid) { a[n] = a[n-1]; n = n-1; } a[n-1] = insert; } if(l>r) { //a[l]肯定大于a[r];比较a[r]是否大于insert,如果大于,从a[r]往后撤,如过不是从a[l]向后撤。 if(a[r]>insert) { while(n-1>=r) { a[n] = a[n-1]; n = n-1; k++; } n=n+k; a[r] = insert; } else if(a[r]<insert) { while(n-1 >= l) { a[n] = a[n-1]; n=n-1; k++; } n=n+k; a[l] = insert; } } } for(int i = 0 ; i<= n ;i++) { printf("%d ",a[i]); } }