第一章、排序

第一节、桶排

p4  桶排的常见程序,从小到大,10以内

#include <stdio.h>
int main()
{
    int a[11],i,j,t;
    for(i=0;i<=10;i++)
        a[i]=0;  //初始化为0

    for(i=1;i<=5;i++)  //循环读入5个数
    {
        scanf("%d",&t);  //把每一个数读到变量t中
        a[t]++;  //进行计数
    }

    for(i=0;i<=10;i++)  //依次判断a[0]~a[10]
        for(j=1;j<=a[i];j++)  //出现了几次就打印几次
            printf("%d ",i);

    getchar();getchar();
    //这里的getchar();用来暂停程序,以便查看程序输出的内容
    //也可以用system("pause");等来代替
    return 0;
}
//    5 3 5 2 8

p6  桶排,从大到小,1000以内

#include <stdio.h>
int main()
{
    int a[100],i,j,t,n;
    scanf("%d",&n);  //输入一个数n,表示接下来有n个数
    for(i=1;i<=n;i++)  //循环读入n个数到数组a中
        scanf("%d",&a[i]);
    //冒泡排序的核心部分
    for(i=1;i<=n-1;i++) //n个数排序,只用进行n-1趟
    {
        for(j=1;j<=n-i;j++) //从第1位开始比较直到最后一个尚未归位的数,想一想为什么到n-i就可以了。
        {
            if(a[j]>a[j+1]) //升序:从小到大。书里‘<‘,搞错了
            {  t=a[j]; a[j]=a[j+1]; a[j+1]=t;  }
        }
    }
    for(i=1;i<=n;i++)  //输出结果
        printf("%d ",a[i]);
    getchar();getchar();
    return 0;
}

/*

10
8 100 50 22 15 6 1 1000 999 0

*/

第二节、冒泡排序

p9  冒泡常见排序  升序

#include <stdio.h>
int main()
{
    int a[100],i,j,t,n;
    scanf("%d",&n);  //输入一个数n,表示接下来有n个数
    for(i=1;i<=n;i++)  //循环读入n个数到数组a中
        scanf("%d",&a[i]);
    //冒泡排序的核心部分
    for(i=1;i<=n-1;i++) //n个数排序,只用进行n-1趟
    {
        for(j=1;j<=n-i;j++) //从第1位开始比较直到最后一个尚未归位的数,想一想为什么到n-i就可以了。
        {
            if(a[j]>a[j+1]) //升序:从小到大。书里‘<‘,搞错了
            {  t=a[j]; a[j]=a[j+1]; a[j+1]=t;  }
        }
    }
    for(i=1;i<=n;i++)  //输出结果
        printf("%d ",a[i]);
    getchar();getchar();
    return 0;
}

/*

10
8 100 50 22 15 6 1 1000 999 0

*/

p10  由结构的一个成员大小,冒泡排序结构,降序

#include <stdio.h>
struct student
{
    char name[21];
    char score; //xinle:这里的char,改成int可能更好
};//这里创建了一个结构体用来存储姓名和分数
int main()
{
    struct student a[100],t;
    int i,j,n;
    scanf("%d",&n); //输入一个数n
    for(i=1;i<=n;i++) //循环读入n个人名和分数
        scanf("%s %d",a[i].name,&a[i].score);
    //按分数从高到低进行排序
    for(i=1;i<=n-1;i++)
    {
        for(j=1;j<=n-i;j++)
        {
            if(a[j].score<a[j+1].score)//对分数进行比较
            {  t=a[j]; a[j]=a[j+1]; a[j+1]=t;  }
        }
    }
    for(i=1;i<=n;i++)//输出人名
        printf("%s\n",a[i].name);
    getchar();getchar();
    return 0;
}

/*

5
huhu 5
haha 3
xixi 5
hengheng 2
gaoshou 8

*/

第三节、快排

p18  常见快排程序

#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用

void quicksort(int left,int right)
{
    int i,j,t,temp;
    if(left>right)
       return;

    temp=a[left]; //temp中存的就是基准数
    i=left;
    j=right;

    while(i!=j)
    {
        //顺序很重要,要先从右边开始找
        while(a[j]>=temp && i<j)
            j--;
        //再找右边的
        while(a[i]<=temp && i<j)
            i++;
        //交换两个数在数组中的位置
        if(i<j)
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }

    //最终将基准数归位
    a[left]=a[i];
    a[i]=temp;

    quicksort(left,i-1); //继续处理左边的,这里是一个递归的过程
    quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程
}

int main()
{
    int i;
    //读入数据
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);

    quicksort(1,n); //快速排序调用

    //输出排序后的结果
    for(i=1;i<=n;i++)
        printf("%d ",a[i]);

    getchar();getchar();
    return 0;
}

/*

10
6  1  2  7  9  3  4  5  10  8

*/

第四节、小哼买书

p22  桶排用于去重,得心应手

#include <stdio.h>
int main()
{
    int a[1001],n,i,t;
    for(i=1;i<=1000;i++)
        a[i]=0; //初始化

    scanf("%d",&n); //读入n
    for(i=1;i<=n;i++) //循环读入n个图书的ISBN号
    {
        scanf("%d",&t); //把每一个ISBN号读到变量t中
        a[t]=1; //标记出现过的ISBN号
    }

    for(i=1;i<=1000;i++) //依次判断1~1000这个1000个桶
    {
          if(a[i]==1)//如果这个ISBN号出现过则打印出来
             printf("%d ",i);
    }

    getchar();getchar();
    return 0;
}

/*

10
20 40 32 67 40 20 89 300 400 15

*/

p23  用冒泡排序,解决去重

#include <stdio.h>
int main()
{
    int a[101],n,i,j,t;

    scanf("%d",&n);   //读入n
    for(i=1;i<=n;i++) //循环读入n个图书ISBN号
    {
        scanf("%d",&a[i]);
    }

   //开始冒泡排序
    for(i=1;i<=n-1;i++)
    {
         for(j=1;j<=n-i;j++)
        {
             if(a[j]>a[j+1])
            {  t=a[j]; a[j]=a[j+1]; a[j+1]=t;  }
        }
    }
    printf("%d ",a[1]); //输出第1个数
    for(i=2;i<=n;i++) //从2循环到n
    {
         if( a[i] != a[i-1] ) //如果当前这个数是第一次出现则输出
             printf("%d ",a[i]);
    }

    getchar();getchar();
    return 0;
}

/*

10
20 40 32 67 40 20 89 300 400 15

*/



相关OJ:

小哼买书

http://www.tianchai.org/problem-12001.html

AC代码:

#include <stdio.h>
int main()
{
    int a[1001],n,i,t,sum;
    for(i=1;i<=1000;i++)
        a[i]=0; //初始化

    scanf("%d",&n); //读入n
    for(i=1;i<=n;i++) //循环读入n个图书的ISBN号
    {
        scanf("%d",&t); //把每一个ISBN号读到变量t中
        a[t]=1; //标记出现过的ISBN号
    }

    sum=0;
    for(i=1;i<=1000;i++)
      if(a[i]) sum++; //统计总数

    printf("%d\n",sum); //输出第一行

    for(i=1;i<=1000;i++) //依次判断1~1000这个1000个桶
    {
          if(a[i]==1)//如果这个ISBN号出现过则打印出来
             printf("%d ",i);
    }

    //getchar();getchar();
    return 0;
}

/*

10
20 40 32 67 40 20 89 300 400 15

*/

Top

时间: 2024-10-11 16:39:08

第一章、排序的相关文章

对一千万条数据进行排序---编程珠玑第二版 第一章

本书第一章提出了一个看似简单的问题,有最多1000万条不同的整型数据存在于硬盘的文件中,如何在1M内存的情况下对其进行尽可能快的排序. 每个数字用4byte,1M即可存储250 000个数据,显然,只要每次对250 000个数据排序,写入到文件中即可,重复40次. 那么如何选出每次遍历的二十五万条数据呢?有如下两个策略: 1.对一千万条数据遍历40次,第i次遍历时,判断数是否属于[i*250000,i*250000+249999),如果是,则读入内存,当第i次遍历完成时,内 存中有了二十五万条数

【网络原理】期末复习笔记 第一章 概述

第一章 概述 1.1 网络在现代的作用 21世纪三化:数字化(声音信号数字化处理,为了电脑处理和传输).网络化.信息化 三网:电信网络(电话).有线电视网络(同轴电缆.从有线电视公司到用户).计算机网络(因特                 网.其他网络) 1.2 计算机网络的重要功能       连通性:彼此联通.交换信息     ·远程桌面客户端:mstsc(Microsoft terminal services client) Win10.win7是单用户操作系统,只允许一个用户同时操作.

用 WEKA 进行数据挖掘 ——第一章:简介

1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中在特征提取,算法选择和参数调优上.那么,一个可以方便地提供这些功能的工具,便是十分必要的了.而weka,便是数据挖掘工具中的佼佼者.Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化的,基于JAVA环境下

《编程珠玑》第一章

一.题目: 如何在1MB的空间里面对一千万个整数进行排序?并且每个数都小于1千万.实际上这个需要1.25MB的内存空间(这里所说的空间是考虑用位图表示法时,每一位代表一个数,则1千万/(1024*1024*8) 约为1.25MB  ). 1MB总共有838,8608个可用位.所以估计也可以在1MB左右的空间里面进行排序了. 分析: 1)基于磁盘的归并排序(耗时间) 2)每个号码采用32位整数存储的话,1MB大约可以存储250 000 个号码,需要读取文件40趟才能把全部整数排序.(耗时间) 3)

Async in C# 5.0(C#中的异步编程Async) 蜗牛翻译之第一章

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,祝各位爱技术的园友在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力

第一章 C++简介

第一章  C++简介 1.1  C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2  C语言及其编程原理 20世纪70年代贝尔实验室的Dennis Ritchie开发了C语言(为了开发UNIX操作系统). C语言是过程性语言,采用结构化编程方法(代码块.分支结构,如for.while等代码块). C语言流行自顶向下的程序设计. 1.3  C++语言 1.3.1  C++起源 C++也是在贝尔实验室

Solr In Action 中文版 第一章(一)

1.1我到底需要一个搜索引擎吗? 第一章           Solr 简介 本章速览: ·搜索引擎处理的数据特性 ·常见搜索引擎用例 ·Solr核心模块介绍 ·选择Solr的理由 ·功能概述 伴随着社交媒体.云计算.移动互联网和大数据等技术的高速发展,我们正迎来一个令人激动的计算时代.软件架构师们开始面对的主要挑战之一,便是如何处理全球巨大的用户基数所产生及使用的海量数据.此外,用户们开始期待在线软件应用永远都是稳定可用的,并且能够一直保持响应,这对应用就提出了更高的可扩展性和稳定性需求.为了

Solr In Action 中文版 第一章 (二)

Solr到底是什么? 在本节中,我们通过从头设计一个搜索应用来介绍Solr的关键组件.这个过程将有助于你理解Solr的功能,以及设计这些功能的初衷.不过在我们开始介绍Solr的功能特性之前,还是要先澄清一下Solr并不具有的一些性质: 1)  Solr并不是一个像Google或是Bing那样的web搜索引擎 2)  Solr和网站优化中经常提到的搜索引擎SEO优化没有任何关系 好了,现在假设我们准备为潜在的购房客户设计一个不动产搜索的网络应用.该应用的核心用例场景是通过网页浏览器来搜索全美国范围

Solr In Action 中文版 第一章(四、五)

1.1             功能概览1. 4 最后,让我们再按照下面的分类,快速的过一下Solr的主要功能: ·用户体验 ·数据建模 ·Solr 4的新功能 在本书中,为你的用户提供良好的搜索体验会一直贯穿全书的主题.所以我们就从用户体验开始,看看Solr是如何让你的用户感觉到爽的. 1.4.1             用户体验类功能 Solr提供了一系列的重要功能来帮助你搭建一个易用的,符合用户直觉的,功能强大的搜索引擎.不过你需要注意的是Solr仅仅是提供了类REST风格的HTTP AP

【USACO】第一章总结

做了大半个月,终于把第一章做完了 有的题遇到了不小的坎儿,看着网上一群高中生都做得那么好,心理还是有些小郁闷的.不禁感慨我过去的四年真是虚度啊.总结一下第一章学习到的知识吧. ①闰年判断 int isleapyear(int N) { if((N%100 != 0 && N%4 ==0) || (N%400 == 0)) return 1; else return 0; } 计算闰年日期时可以用两个数组存放每个月的时间 int Year[12] = {31, 28, 31, 30, 31,