題目大意: 已有 n (n≤100) 個按升序排列的整數,再給一個整數 x,將 x 插入序列使其保持有序。多組測試,n=m=0 結束。
#includeint main() { int n, m, a[101]; // n+1 防越界 while (scanf("%d %d", &n, &m) == 2) { if (n == 0 && m == 0) break; for (int i = 0; i < n; i++) scanf("%d", &a[i]); int i = n - 1; while (i >= 0 && a[i] > m) { a[i + 1] = a[i]; i--; } a[i + 1] = m; // 插入位置 for (int j = 0; j <= n; j++) { if (j) printf(" "); printf("%d", a[j]); } printf("\n"); } return 0; }
輸入: 3 3 1 2 4 0 0 輸出: 1 2 3 4
int pos = 0, left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] <= m) pos = mid + 1, left = mid + 1;
else right = mid - 1;
}
// pos 為插入位置,然後移動元素 a[pos...n-1] 右移