首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在排序数组中执行插入操作

这段代码出了什么问题?问题出在哪里?我多次运行这段代码,但它显示代码正在运行,但我没有得到任何输出。你能告诉我哪里出了错吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int print_arr(int *arr, int n)
{    for(int i=0; i<=n; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

int insert_ele(int *arr_a, int *arr_b, int n, int Key)
{
    int i,j;
    for(i=0, j=0; i<n; i++, j++)
    {
        if(arr_a[i]>Key)
        {
            arr_b[j] = Key;
            arr_b[j+1] = arr_a[i];
            j++;
        }
        else
        {
            arr_b[j] = arr_a[i];
        }
    }
    return 0;
}

int main() 
{
    //code
    int arr_a[] = {12, 16, 20, 40, 50, 70};
    int arr_b[10];
    int Key = 26;
    int n = sizeof(arr_a)/sizeof(arr_a[0]);
    int indx = insert_ele(arr_a, arr_b, n, Key);
    print_arr(arr, n);
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-11 13:05:29

对于初学者来说,这条语句中有一个拼写错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print_arr(arr, n);

看起来你是说

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print_arr( arr_b, n + 1 );

函数print_arr的返回类型int没有意义,也没有用。

函数的第一个参数应该具有限定符const,因为传递的数组在函数中没有更改。

第二个参数的类型应该是size_t

这是for循环

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(int i=0; i<=n; i++)

如果函数的用户将在第二个参数n中传递数组中的元素数量,则可以调用未定义的行为,因为在这种情况下,将尝试访问数组以外的内存。

同样,函数insert_ele的返回类型int没有任何意义,也是无用的。

第一个参数应该具有限定符const,因为源数组不会在函数中更改。参数n的类型应为size_t

该函数存在逻辑错误。

让我们假设变量Key的值小于数组arr_a的所有元素的值。

在这种情况下,索引j将递增两次,因此您将拥有

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b[0] = Key; b[2] = Key; b[4] = Key; and so on.

如果将for循环拆分为两个for循环,那么函数的逻辑就会清晰得多。

程序可以看起来像下面这样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

size_t insert_ele( const int *a, size_t n, int *b, int key )
{
    size_t i = 0;
    
    for ( ; i < n && !( key < a[i] ); i++ )
    {
        b[i] = a[i];
    }
    
    b[i] = key;
    
    for ( ; i < n; i++ )
    {
        b[i+1] = a[i];
    }
    
    return i;
}

FILE *  print_arr( const int *a, size_t n, FILE *fp )
{   
    for ( size_t i = 0; i < n; i++)
    {
        fprintf( fp, "%d ", a[i] );
    }
    
    return fp;
}

int main(void) 
{
    int a[] = { 12, 16, 20, 40, 50, 70 };
    const size_t N = sizeof( a ) / sizeof( *a );
    int b[10];
    
    int key = 26;
    
    size_t m = insert_ele( a, N, b, key );
    
    fputc( '\n', print_arr( b, m, stdout ) );
    
    return 0;
}

程序输出为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
12 16 20 26 40 50 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67044793

复制
相关文章
pandas和spark的dataframe互转
由于pandas的方式是单机版的,即toPandas()的方式是单机版的,所以参考breeze_lsw改成分布式版本:
机器学习和大数据挖掘
2019/07/01
2.9K0
pandas dataframe 新增单列和多列
dataframe assign方法,返回一个新对象(副本),不影响旧dataframe对象
lovelife110
2021/01/14
4.3K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
3、将“A”、“B”、“C”和“D”列中的所有 NaN 元素分别替换为 0、1、2 和 3。
全栈程序员站长
2022/09/22
3.5K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
Pandas DataFrame显示行和列的数据不全
pd.set_option('display.max_columns', None)
用户7886150
2020/12/26
6.7K0
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
创建一个包含10行6列随机数的DataFrame,行标签从大写字母A开始,列标签从小写字母u开始。然后从上向下遍历,如果某行u列的值比上一行u列的值大,就把该行x列的值改为上一行x列的值加1,否则保持原来的值不变。
Python小屋屋主
2023/08/29
4350
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
Pandas 如何创建 DataFrame
我们已经知道了什么是 Series,在使用 Series 之前,我们得知道如何创建 Series。
用户7886150
2020/12/26
1.6K0
从DataFrame中删除列
在操作数据的时候,DataFrame对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注。
老齐
2021/03/29
7K0
pandas按行按列遍历Dataframe的几种方式
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。 iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。 示例数据
kirin
2021/04/30
7.1K0
(六)Python:Pandas中的DataFrame
        DataFrame与Series相比,除了可以每一个键对应许多值之外,还增加了列索引(columns)这一内容,具体内容如下所示:
小点点
2022/12/12
3.9K0
如何在 Pandas DataFrame中重命名列?
分析人员重命名列名称的动机之一是确保这些列名称是有效的Python属性名称。这意味着列名称不能以数字开头,而是带下画线的小写字母数字。好的列名称还应该是描述性的,言简意赅,并且不应与现有的DataFrame或Series属性冲突。
五分钟学大数据
2022/10/05
5.6K0
如何在 Pandas DataFrame中重命名列?
使用Pandas melt()重塑DataFrame
重塑 DataFrame 是数据科学中一项重要且必不可少的技能。在本文中,我们将探讨 Pandas Melt() 以及如何使用它进行数据处理。
deephub
2022/01/21
3K0
使用Pandas melt()重塑DataFrame
pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]
有时候DataFrame中的行列数量太多,print打印出来会显示不完全。就像下图这样:
全栈程序员站长
2022/09/14
9.3K0
pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4K0
数据分析-如何重命名Pandas DataFrame中的列名?
DataFrames和Series是用于数据存储的pandas中的两个主要对象类型:DataFrame就像一个表,表的每一列都称为Series。您通常会选择一个系列来分析或操纵它。今天我们将学习如何重命名Pandas DataFrame中的列名。
XXXX-user
2019/08/20
7.7K0
数据分析-如何重命名Pandas DataFrame中的列名?
Spark DataFrame
DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。SchemaRDD作为Apache Spark 1.0版本中的实验性工作,它在Apache Spark 1.3版本中被命名为DataFrame。对于熟悉Python pandas DataFrame或者R DataFrame的读者,Spark DataFrame是一个近似的概念,即允许用户轻松地使用结构化数据(如数据表)。
week
2018/12/07
9180
在pandas中遍历DataFrame行
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
用户7886150
2020/12/26
3.2K0
pandas | 如何在DataFrame中通过索引高效获取数据?
上篇文章当中我们简单介绍了一下DataFrame这个数据结构的一些常见的用法,从整体上大概了解了一下这个数据结构。今天这一篇我们将会深入其中索引相关的应用方法,了解一下DataFrame的索引机制和使用方法。
TechFlow-承志
2020/07/10
13.6K0
pandas | 如何在DataFrame中通过索引高效获取数据?
Pandas 修改单列,多列,Dataframe 数据类型方法汇总
文章目录 1.修改单列的数据类型 2.修改指定多列的数据类型 3.创建dataframe时,修改数据类型 4.读取时,修改数据类型 5.自动 1.修改单列的数据类型 import pandas as pd import numpy as np df = pd.read_csv('test.csv') df['column_name'] = df['column_name'].astype(np.str) print(df.dtypes) 2.修改指定多列的数据类型 import pandas as
白墨石
2021/01/13
6.7K0
pandas | DataFrame中的排序与汇总方法
今天是pandas数据处理专题的第六篇文章,我们来聊聊DataFrame的排序与汇总运算。
TechFlow-承志
2020/08/04
4.7K0
pandas | DataFrame中的排序与汇总方法
点击加载更多

相似问题

使用sslMode=verify的Openliberty连接失败

20

OpenLiberty - VisualVM

13

使用始终加密的特性时Server数据源连接失败

15

将OpenLiberty连接到RabbitMQ over JMS

14

在JMSToolbox上连接OpenLiberty应用程序

115
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文