c - 向一个排序好的数组插入一个数,插入后数组依然是排序好的

概述

  因为这里只是演示插入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 }

 

posted @ 2014-12-15 11:27  wonkju  阅读(923)  评论(0编辑  收藏  举报