• 第一章、排序


    第一节、桶排

    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
    View Code

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

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int book[1001],i,j,t,n;
     5     for(i=0;i<=1000;i++)
     6         book[i]=0; 
     7     scanf("%d",&n);//输入一个数n,表示接下来有n个数
     8     for(i=1;i<=n;i++)//循环读入n个数,并进行桶排序
     9     {
    10         scanf("%d",&t);  //把每一个数读到变量t中
    11         book[t]++;  //进行计数,对编号为t的桶放一个小旗子
    12     }
    13     for(i=1000;i>=0;i--)  //依次判断编号1000~0的桶
    14         for(j=1;j<=book[i];j++)  //出现了几次就将桶的编号打印几次
    15              printf("%d ",i);
    16 
    17     getchar();getchar();
    18     return 0;
    19 }
    20 /*
    21 
    22 10
    23 8 100 50 22 15 6 1 1000 999 0
    24 
    25 */
    View Code

    第二节、冒泡排序

    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
    
    */
    View Code

    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
    ",a[i].name);
        getchar();getchar();
        return 0;
    }
    
    /*
    
    5
    huhu 5
    haha 3
    xixi 5
    hengheng 2
    gaoshou 8
    
    */
    View Code

    第三节、快排

    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
    
    */
    View Code

    第四节、小哼买书

    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
    
    */
    View Code

    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
    
    */
    View Code

    相关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
    ",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
    
    */
    View Code

    Top

  • 相关阅读:
    Android 通过ViewFlipper实现广告轮播功能并可以通过手势滑动进行广告切换
    [C#][DevPress]自定义数据分页控件
    [C#][SQLLITE]一个数据分页技巧
    [C#]用SharpZipLib压缩多个文件
    [C#][DevPress]省市县乡嵌套查询
    [C#][DevPress]事件委托的使用
    [C#]Excel操作类
    [C#][DevPress]手动添加控件中的子控件或者结构
    [C#]XML操作类
    [C#]把DataTable转换成泛型实体List
  • 原文地址:https://www.cnblogs.com/xin-le/p/4032929.html
Copyright © 2020-2023  润新知