ALiowys 发表于 2020-4-30 16:36:30

C语言_数组_插入法排序

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

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

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

sunrise085 发表于 2020-4-30 17:24:24

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

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

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

ALiowys 发表于 2020-4-30 17:34:25

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

感谢,
我在查资料的时候看到这里别人比我多一个约束了,
但是没有考虑加进去,
页: [1]
查看完整版本: C语言_数组_插入法排序