一些OJ的排序题(冒泡排序的一般形式)
来源:互联网 发布:java字符流写入文件 编辑:程序博客网 时间:2024/05/29 16:44
由于期末期间,完全把心思放在了预习课本和刷试卷了。基本上两个月没有写过代码。
过了考试,在刷CCF认证题库时,出现了很多的问题,甚至连冒泡排序都记不清楚。虽然最近物联网项目也比较紧,决定以后还是保持每天至少一个题的量度。晚上学习数据结构与算法。
下面是CCF认证的2015/3/2的一个数字排序题目,和类似的题(2013/12/1次数最多)。
2015/3/2
问题描述
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5
5 2 3 3 1 3 4 2 5 2 3 5
样例输出
3 4
2 3
5 3
1 1
4 1
2 3
5 3
1 1
4 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数
本题的思路:由输入来确定这个数的出现次数,用结构体的成员分别表示这个数和这个数的次数,再用冒泡排序对次数排序,然后针对次数相同的,再进行冒泡排序。也可以采用快速排序。2013年的那个题可以,直接打印第一项的数字即可。
源代码如下:
#include<stdio.h>typedef struct{
int x;
int y;
}str[1000];
int main(void)
{
str st;
int N;
int a,b,c,d=0,e,f;
int i=0,j,l;
int flag;
scanf("%d",&N);
while(N)
{
N--;
flag=1;
scanf("%d",&a);
for(j=0;j<i;j++)
{
if(st[j].x == a)
{
st[j].y++;
flag=0;
}
}
if(flag)
{
st[i].x=a;
st[i].y=1;
i++;
}
}
for(l=0;l<i-1;l++)//对次数进行冒泡排序
{
for(j=0;j<i-1-l;j++)
{
if(st[j+1].y >st[j].y)
{
b=st[j+1].y;
st[j+1].y=st[j].y;
st[j].y=b;
b=st[j+1].x;
st[j+1].x=st[j].x;
st[j].x=b;
}
}
}
for(l=0;l<i;l++)//将次数相同的进行冒泡排序
{
c=st[d].y;//找到次数
for(f=d;f<i;f++)
{
if(st[f].y != c)//从d到f-1是这次数相同的范围
{
break;
}
}
for(j=d;j<f-1+d;j++)//在范围内进行冒泡排序
for(e=d;e<f-1-j+d;e++)
{
if(st[e+1].x<st[e].x)
{
b=st[e].x;
st[e].x=st[e+1].x;
st[e+1].x=b;
}
}
d=f;
}
for(j=0;j<i;j++)
{
printf("%d %d\n",st[j].x,st[j].y);
}
return 0;
}
有好多的变量是可以不要的。当时也没想太多,就直接定义了。
0 0
- 一些OJ的排序题(冒泡排序的一般形式)
- 冒泡排序的两种形式
- 冒泡排序的一些整理
- 关于冒泡排序的一些体会
- 仿照qsort函数的形式编写简单选择排序,冒泡排序,希尔排序函数
- 一般冒泡排序和双向冒泡排序
- C的一些简单习题(6)--冒泡排序
- 一般的希尔排序
- 鸡尾酒排序(改进的冒泡排序)
- 起泡排序(冒泡排序)的实现
- 冒泡排序中数据交换的次数 (sdut oj)
- 华为测试题图片排序(简单的冒泡排序)
- C 冒泡排序 冒泡排序的优化
- 字符的排序(冒泡排序,选择排序)
- 数组的排序:冒泡排序、选择排序
- c和c++的一些训练题(1)(冒泡法排序运动员成绩)
- OJ刷题之《双向冒泡排序》
- 冒泡排序的效率
- %后面字母含义&如何发现系统中堆栈的大致位置
- SharedPreferences的跨应用读/写
- 学习笔记9:Scala外部类和内部类
- 面向 Perl 开发人员的 XML,第 2 部分: 使用到 Perl 的高级 XML 解析技术
- 克隆后手动设置IP启动网卡报错
- 一些OJ的排序题(冒泡排序的一般形式)
- 排序算法——堆排序
- 黑马程序员_java正则表达式
- ViewPage详解
- 管理系统UI之四:使用全屏沉浸模式(Using Immersive Full-Screen Mode)
- DOS下for循环运用
- HTML+CSS+JavaScript基础知识
- android 编程规范
- grep正则表达