黑马程序员技术交流社区

标题: 插入排序 [打印本页]

作者: tsc0000    时间: 2015-10-30 10:16
标题: 插入排序
这是一个插入排序的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();
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2