往有序数组中插入数
2016-02-14 17:41
253 查看
/*已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列*/
#include <stdio.h> /** * 折半查找法找到需要插入的位置(下标) * * @param p 数组 * @param num 需要插入的数 * @param length 数组元素的个数 * * @return 需要插入数组对应的下标 */ int arrayInsertNumber(int *p, int num,int length) { int max = length - 1; int min = 0; int mid = (max + min)/2; while (max >= min) { mid = (max + min)/2; if (num > p[mid]) { min = mid + 1; }else if (num < p[mid]) { max = mid - 1; }else { return mid; } } return mid - 1; } int main(int argc, const char * argv[]) { int a[] = {1,3,5,5,7,9,10,19,20,30}; int length = sizeof(a)/sizeof(a[0]); //定义数组b[]保存插入后的数据 int b[length + 1]; int num; printf("请输入需要插入数组中的数字\n"); scanf("%i",&num); //调用函数获取下标 int index = arrayInsertNumber(a, num, length); printf("需要插入数组a[]下标为 %i 的位置\n",index); int j = 0; //遍历数组a[] for (int i = 0; i < length ; i++) { //index前的数分别对应赋值给b[] if (i < index) { b[j++] = a[i]; } //index对应的a[i]仍然对应赋值,把num插入到index+1的位置 else if (i == index) { b[j] = a[i]; b[++j] = num; } //原a数组index之后的数据依次后移一位 else { b[++j] = a[i]; } } printf("插入后的数组为:\n"); //遍历输出b[] for (int i = 0; i < length + 1; i++) { printf("%i ",b[i]); } printf("\n"); return 0; }
相关文章推荐
- Spark技术内幕:Shuffle的性能调优
- JUnit——学习笔记
- 12.代理、通知、KVC\KVO
- 数组元素排序
- SQL之limit用法
- 数据结构之哈希表的实现
- rocketmq问题汇总-broker配置brokerIp2何时该配置?
- KM(n^4)模板
- 字符串反序输出
- Python实现ID3算法决策树
- 安装 XAMPP中FileZilla和Tomcat无法启动的解决办法
- [RED5]用red5做视频直播(red5流媒体直播)
- KM(N^3)模板(HDU2255)
- rocketmq3.26研究之Failover下consumer的表现
- 从点到面,给Button的属性动画
- Happy Valentine's Day
- 学生成绩
- 转:解决centos netstat和ps感染木马
- springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
- Android检测手机系统版本号、手机品牌工具类