概述
因为这里只是演示插入1个数,这里我不用malloc再重新分配,而是将原先数组的腾出一个占位符.
完整代码如下:
1 #include <stdio.h> 2 3 #define LEN 6 //数组的长度. 4 5 /* 6 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中. 7 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。 8 */ 9 10 //返回即将插入到数组中的下标. 11 int 12 indexToInsert(int *a, int key) { 13 //原数组下标的最后一个数的下标为:LEN - 2. 14 for(int i = LEN - 2; i >= 0; i--) { 15 if(key >= a[i]) 16 return i + 1; //插入下标为i的数的后面. 17 } 18 return 0; //待插入的数比数组中的值都小. 19 } 20 21 void 22 insert(int *a, int key) { 23 int index = indexToInsert(a, key); 24 for(int i = LEN - 2; i >= index; i--) //将下标为index到次末尾的数都后移. 25 a[i + 1] = a[i]; 26 a[index] = key; //插入指定的值. 27 } 28 29 //打印. 30 void 31 show(int *a) { 32 for(int i = 0; i < LEN; i++) 33 printf("%d ", a[i]); 34 printf("\n"); 35 } 36 37 int 38 main(void) { 39 int a[] = {1, 2, 3, 5, 6, ‘\0‘}; //最后一个数是占位符. 40 int key = 4; //将4插入. 41 insert(a, key); 42 show(a); 43 printf("\n"); 44 }
时间: 2024-10-30 10:09:15