首页 > 代码库 > c - 向一个排序好的数组插入一个数,插入后数组依然是排序好的

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 void22 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 void31 show(int *a) {32     for(int i = 0; i < LEN; i++)33         printf("%d ", a[i]);34     printf("\n");35 }36 37 int38 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 }

 

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