从前往后找插入的位置,当插入的数是小于等于当前数组位置的数,那么这个点就是插入点
插入之前需要把插入位置及之后的数都要往后移一格,并且只能从后面开始移动,从前移动会覆盖后面的数
#include <stdio.h> #include <stdlib.h> int main() { int n = 0; scanf("%d", &n); //申请n+1个空间大小的数组 int* a = (int*)malloc(sizeof(int) * (n + 1)); for(int i = 0; i < n; i++) { scanf("%d", &a[i]); } //插入的数 int m; scanf("%d", &m); int i = 0; //找出要在那个位置插入 for(i = 0; i < n + 1; i++) { if(m <= a[i]) break; } //把这个位置之后的数据往后移一格,n是数组最后一个元素的下标 int j =0; for(j = n; j > i; j--) { a[j] = a[j - 1]; } //插入m到数组,跳出循环是j == i a[j] = m; //打印数组 for(i = 0; i < n + 1; i++) { printf("%d ", a[i]); } return 0;
}