zoukankan      html  css  js  c++  java
  • 排序1之插入排序

    插入排序,就像好多书上讲的像抓牌时将刚抓的新牌插入手里已经排好序的牌。a数组像牌堆,b数组像已经抓到我们手里的牌

    #include <stdio.h>
    #define N 10  //这里是定义要排序的数目
    int main()
    {
        int a[N],b[N];  //定义数组,a数组用来存输入的数,b数组用来存排序的结果
        int i,j;
        for(i=0;i<N;i++)
          scanf("%d",&a[i]);
        b[0]=a[0];
        for(i=1;i<N;i++)
        {
            j=i;
            while(j&&b[j-1]>a[i])//这里作比较大小(b数组从小到大排)
               {
                    b[j]=b[j-1];//这里就是后移操作,毕竟是计算机,插入数据前还是要先让出空间的。
                    j--;
               }
            b[j]=a[i];
        }
        for(i=0;i<N;i++)//把排好的结果输出来
        printf("%d ",b[i]);
        return 0;
    }

    插入排序很简单,上面开了2个数组,我们提出疑问是否可以只用一个数组,仔细想想刚才的排序过程,感觉b数组可以不用的,来看下面的程序
    #include <stdio.h>
    #define N 10
    int main()
    {
        int a[N];
        int i,j,temp;
        for(i=0;i<N;i++)
          scanf("%d",&a[i]);
        for(i=1;i<N;i++)
        {
            j=i;temp=a[i];//对比上面的代码
            while(j&&a[j-1]>temp)//对比上面的代码
               {
                    a[j]=a[j-1]; //对比上面的代码
                    j--;
               }
            a[j]=temp;
        }
        for(i=0;i<N;i++)
        printf("%d ",a[i]);
        return 0;
    }
    哈哈、用了一个自变量后,b数组就可以不用了,节省了空间的开销。

  • 相关阅读:
    写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我
    WCF快速上手(二)
    Oracle递归查询
    100多行代码实现6秒完成50万条多线程并发日志文件写入
    C#写日志工具类
    WPF定时刷新UI界面
    HttpUtil工具类
    WPF GridView的列宽度设置为按比例分配
    Visifire图表
    C# BackgroundWorker 的使用、封装
  • 原文地址:https://www.cnblogs.com/heqinghui/p/2615407.html
Copyright © 2011-2022 走看看