鱼C论坛

 找回密码
 立即注册
查看: 551|回复: 2

[已解决]C语言_数组_插入法排序

[复制链接]
发表于 2020-4-30 16:36:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天刚看到数组的排序算法,
书中给的是从小到大排序,
自己想尝试从大到小排序,
但是自己的程序始终跑不动,
求一个插入排序法从从大大小排序下面是从小到大排序的代码
#include<stdio.h>
#define N 10
void sort_insert(int a[N])
{
        int b[N];
        int i,j,temp;
        for(i=1;i<N;i++)
        {
                temp=a[i];
                
                for(j=i;temp<a[j-1];j--) a[j]=a[j-1];        
                
                a[j]=temp;
        }
}

void output(int a[N])
{
        int i;
        printf("\nThe array is:\n");
        for(i=0;i<N;i++) printf("a[%d]=%d\t",i,a[i]);                
}

int main()
{
        int a[N]={2,5,3,8,4,7,34,3,67,2};
        
        sort_insert(a);
        output(a);
        
        return 0;
}

最佳答案
2020-4-30 17:24:24
之所以原来的从小到大的排序没出错,是因为基本上没有用到的空间的值都是负值,所以你那样写也没有出错。但是一旦所排序的序列中有非常小的负值,可能就会出错了,下标溢出。。
#include<stdio.h>
#define N 10
void sort_insert(int a[N])
{
    int b[N];
    int i,j,temp;
    for(i=1;i<N;i++)
    {
        temp=a[i];
        for(j=i;temp>a[j-1] && j>0;j--)//这里源程序是有问题的
            a[j]=a[j-1];
        a[j]=temp;
    }
}

void output(int a[N])
{
    int i;
    printf("\nThe array is:\n");
    for(i=0;i<N;i++) printf("a[%d]=%d\t",i,a[i]);                
}

int main()
{
    int a[N]={2 ,5,3,8,4,7,34,3,67,2};
    sort_insert(a);
    output(a);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 17:24:24 | 显示全部楼层    本楼为最佳答案   
之所以原来的从小到大的排序没出错,是因为基本上没有用到的空间的值都是负值,所以你那样写也没有出错。但是一旦所排序的序列中有非常小的负值,可能就会出错了,下标溢出。。
#include<stdio.h>
#define N 10
void sort_insert(int a[N])
{
    int b[N];
    int i,j,temp;
    for(i=1;i<N;i++)
    {
        temp=a[i];
        for(j=i;temp>a[j-1] && j>0;j--)//这里源程序是有问题的
            a[j]=a[j-1];
        a[j]=temp;
    }
}

void output(int a[N])
{
    int i;
    printf("\nThe array is:\n");
    for(i=0;i<N;i++) printf("a[%d]=%d\t",i,a[i]);                
}

int main()
{
    int a[N]={2 ,5,3,8,4,7,34,3,67,2};
    sort_insert(a);
    output(a);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 17:34:25 | 显示全部楼层
sunrise085 发表于 2020-4-30 17:24
之所以原来的从小到大的排序没出错,是因为基本上没有用到的空间的值都是负值,所以你那样写也没有出错。但 ...

感谢,
我在查资料的时候看到这里别人比我多一个约束了,
但是没有考虑加进去,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表