c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢相关的知识,希望对你有一定的参考价值。

给你个代码,参考一下吧
#include <stdio.h>
void insert( int *a, int *n, const int num )

int i,j;
for( i=0;i<*n;i++ )

if ( num < a[i] )
break ;


for( j=*n;j>i;j-- )

a[j]=a[j-1];

a[i]=num;
(*n)++;

void show( int *a, int n )

int i;
for( i=0;i<n;i++ )
printf("%d ", a[i] );
printf("\\n");

int main()

int a[10]=1,3,5,7;
int n=4;
int i;

insert(a,&n,2);
show(a,n);

insert(a,&n,0);
show(a,n);

insert(a,&n,9);
show(a,n);

return 0;

参考技术A void main()
int val[9]=8,10,21,32,35,48,57,70,79];
int num[10];
int a,i,j;
printf("请输入一个数:\n");
scanf("%d",&a);
for(i=0;i<9;i++)
if(val[i]>=a)
num[i]=a;
for(j=i+1;j<10;j++)
num[j]=val[j-1];

i=10;

else
if(i==8)
num[i]=val[i];
num[9]=a;

else
num[i]=val[i];


参考技术B 插入数组的新数位置可知吗?追问

比如原来是012356789现在输入四,就成了0123456789

追答

那我理解不是排序问题,是搜索插入点的问题

追问

九个数变成十个

所以,怎么写程序。。

追答

插入新数时,从前向后遍历数组元素,if(x>=a[i] & x <=a[i+1])就插入在i+1这个位置即可

& -> &&

追问

这个元素数变了啊,怎么输出新的数组

怎么写就插入这个位置

追答

严格的考虑这个问题的话,需要考虑,1,所有元素都比插入数小,2,所有元素都等于插入数,3,元素中等于元素个数大于1, 4元素中有一个元素等于插入数,5,数组所有元素都大于插入数

i+1到结尾的元素,按照从后到前的顺序向后移动一个位置,然后把新数插入到i+1

追问

我有思路,没程序

追答

原题发给我,我帮你写

追问

接下来怎么办

追答

只需要输出时把插入数放在合适的位置即可?

追问

追答

看来需要插入进去

然后在输出

追问

所以,程序呢

追答

int x = 0;
int a[10] = x;
int i;
int n = -1;
//搜索插入位置
for(i=1;i= a[i] && x a[1])
n = sizeof(a);
else if(x < a[sizeof(a) - 1])
n = 0;


//蒋输入位置前的所有元素前移一个位置
for(i=1; i<sizeof(a); i++)
if(i < n)
a[i-1] = a[i];


//将新数插入数组
a[i] = x;

//输出所有元素
for(i=0; i<sizeof(a);i++)
printf("%d", a[i]);

插入排序复习

基本思想将一个元素插入到有序的数组中

先假设前面的第一个元素是已经排好序的数组;不断从后面依次访问元素,放入到前面的有序数组中,根据由小到大的规则调整这个元素在有序数组中的位置(逐个比较交换),…直到当前数组结束;

还是在912. 排序数组题进行测试

基本思想步骤

class Solution 
    public int[] sortArray(int[] nums) 
        int n = nums.length;
        //插入排序;
        //假定前面的是有序数组,从第2个元素开始;
        for(int i =1;i<n;i++)
            for(int j=i;j>0;j--)
                //注意是要和前面的有序数组比较;
                if(nums[j]<nums[j-1])
                    swap(nums,j-1,j);
                else
                    break;
                
            
        
        return nums;
    
    //交换方法;
    private void swap(int[] nums,int a,int b)
        //简单的临时变量交换法;
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    

或者写成

class Solution 
    public int[] sortArray(int[] nums) 
        int n = nums.length;
        //插入排序;
        //假定前面的是有序数组,从第2个元素开始;
        for(int i =1;i<n;i++)
            for(int j=i;j>0 && nums[j]<nums[j-1];j--)
                //注意是要和前面的有序数组比较;
                swap(nums,j-1,j);
            
        
        return nums;
    
    //交换方法;
    private void swap(int[] nums,int a,int b)
        //简单的临时变量交换法;
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    

当然,会超时的;

那么优化时,通过避免交换方式,
转而使用比较赋值即可;将当前数先存入一个第三方变量;
当前元素和前面的有序数组比较时,找到合适位置,将第三方变量的值放到合适位置即可;

class Solution 
    public int[] sortArray(int[] nums) 
        int n = nums.length;
        //插入排序;
        //假定前面的是有序数组,从第2个元素开始;
        for(int i =1;i<n;i++)
            int dsf = nums[i];
            int j=i;
            for(;j>0;j--)
                //注意是要和前面的有序数组比较;
                if(dsf<nums[j-1])
                  //若前面的值大,则把它的值覆盖到当前元素位置;  
                  nums[j] = nums[j-1];
                else
                    break;
                
            
            //将第三方变量的值交到合适位置;
            nums[j] = dsf;
        
        return nums;
    


以上是关于c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何实现-数组排序,二分查找

c语言数组排序好输出问题

[C]排序并插入

怎样用sort和qsort对二维数组排序

js如何在一个排好数组里插一个数,不改变顺序

C语言一维数组排序