欣乐

The eagles are coming!

导航

第一章、排序

第一节、桶排

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\n",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\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

*/
View Code

 

 

 

 

 

 

 

 

Top

 

posted on 2014-10-18 12:59  欣乐  阅读(283)  评论(0编辑  收藏  举报