A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tsc0000 中级黑马   /  2015-10-30 10:16  /  662 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是一个插入排序的C问题。值得被学C的孩子来看一下。有什么不懂,可以和交流一下。好排序,共分享
#include <stdio.h>
#define MAX 255
int R[MAX];
// 注意:数组用的是1..n,数组的第0号用于作数据交换变量
void insert(int n)//从小到大排序
{
    //注意:在进行的r[i]排序时,r[i]前面 的已经是有序的了
        int i,j;
        for(i=2;i<=n;i++)
                if(R[i]<R[i-1]) //如果相邻的数后一个小于前一个
                {
                        R[0]=R[i]; //将当前i对应的数组值保存到r[0]
                        j=i-1;     //赋值成i-1;为do...while()里的作准备
                        do
                        {
                                R[j+1]=R[j];//将当前当前r[i-1] 赋给r[i];相当于后移
                                j--;       //j--,相当于前移一位
                        }
                        while(R[0]<R[j]);//直到打到前面已经排序好的序列中比r[0]小的则结束
                        R[j+1]=R[0];//将r[i] 的位置 赋给当前找到的合适位置
                }
}
main()
{
        int i,n;
        scanf("%d",&n); //输入要排序的个数
        if(n<=0||n>MAX) //判断输入的个数是否在范围之内
        {
                printf("error"); //输出错误
                exit(0);       //退出程序

        }
        puts("please input the element one by one"); //依次输入你的n个数据
        for(i=1;i<=n;i++)
                scanf("%d",&R[i]); //输入数据
               
        puts("the sequence you input is:"); //打印输入的数据
        for(i=1;i<=n;i++)
                printf("%d",R[i]);//输出数据
        insert(n);   //进行排序操作
        puts("\nthe sequence after insert:"); //输出排序后的序列
        for(i=1;i<=n;i++)
                printf("%d ",R[i]);
        puts("\nPress any key to quit");
        getch();
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马