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 }
时间: 2024-10-30 10:09:15

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

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除splice(需明确位置) 9.数组遍历 10.jQuery根据元素值删除数组元素的方法 数组常见操作包含了 增.删.查.改.插入.交集.并集 1.数组整体元素修改 //map,给数组每个元素加1 输出[1,2,3] $.map([0,1,2],function(n){ return n+1; })

java语言插入数组中一个数,仍然能够实现排序

package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Demo16 { /* * 插入数组中一个数,仍能排序 */ public static void main(String[] args) { int []arr={100,70,50,30,10,0}; int []bb=new int[arr.length+1]; System.out.print("请输入你要插入的数字:

有一个有序数组,要求将一个新输入的数插入到数组中并保证插入新数后,数组仍有序。

因为数组在初始条件下是有序的,而题目要求插入新数后数组仍有序.因此,首先应该在数组中找到插入位置,然后将该位置原有的数以及该位置后面的数都依次后移一个位置,为新插入的数值空出一个位置. #include<stdio.h> int main() { int a[11] = {2, 4, 8, 15, 20, 36, 49, 51, 78, 96}; int temp1, temp2, number, end, i, j; printf("The original arry is:\n&

如何将一个数组中的元素插入另一个数组

如何将一个数组中的元素插入另一个数组:本章节直接给出一段将一个数组中元素插入另一个数组中的代码实例,直接套用就可以了.代码如下: var first = ['a','b','c']; var second = ['1','2','3']; var index = 1; second.unshift(index, 0); Array.prototype.splice.apply(first, second); 原文地址是:http://www.softwhy.com/forum.php?mod=v

17、把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. eg: 输入 3 4 5 1 2 输出 1 思路:用二分法查找最小元素 三种情况: (1)rotateArray[mid] >rotateArray[high]: like:[x,x,x,6,x,x,2],此时最小数字一

一个数组中有65535个数不重复的大于0的整数(即:0~~65535内所有不重复的整数,数序是杂乱无章的), 用最快的方式排序

备注:如果这个问题你考虑到用元素对比就大错特错了 当然这个算法还不是最优的,不能代表普遍性.但可以引申,总体还是这个思路,无非就是“填空”操作 public class OrderLink { /** * 一个数组中有65535个数不重复的大于0的整数(即:0~~65535内所有不重复的整数,数序是杂乱无章的), * 用最快的方式排序 * @param args */ public static void main(String[] args) { //例如:一个数组中有65535个数不重复的大

JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)

1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一般来讲使用对象字面量来封装多个可选参数. 3.对象属性的点表示法与方括号表示法的区别 (1)功能上:两者没区别 (2)但是方括号的有点是可以通过变量来访问属性 例如: var person={ name:"Nic" } 点表示法:person.name 方括号表示法:var prop=“nam

“《算法》第4版第2章‘排序’”:初级排序算法(选择、冒泡、插入、希尔)

<算法>第4版作者是Robert Sedgewick 和 Kevin Wayne. 1. 选择排序 选择排序可以说是最简单的排序方法.首先,找到数组中最小的那个元素:其次,将它与数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它就和自己交换):再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置.如此往复,直到将整个数组排序. 该书中提出一个命题:对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换.  程序如下: 1 void SelectionSort::s