poj1007 qsort快排
这道题比较简单,但通过这个题我学会了使用c++内置的qsort函数用法,收获还是很大的!
首先简要介绍一下qsort函数。
1、它是快速排序,所以就是不稳定的。(不稳定意思就是张三、李四成绩都是90,张三成绩在前;排序完毕后有可能变成李四的90在前,张三在后)
2、需要包含头文件:cstdlib
3、原型:void qsort(void *base,int nelem,int width,int(*fcmp)(const void*,const void *));
4、参数:数组首地址,数组内元素数量,每个元素占用空间大小,指向函数的指针
这道题意思是给出一个字符串,从该字符串首字母开始判断在其右边有多少个字母比他小,直到判断玩整个序列得出这个字符串的一个value。如“BAAED”,B比右侧的A(2个)大,E比D大,所以最后这条的value就是3。然后输入若干条字符串,按照value最低到高排序后输出,如果value相同则按输入的顺序输出。
这时可能会想既然value相同时要按输入的顺序输出,那么快速排序肯定就是不行的了,因为它不稳定嘛。这就是这个题一个比较巧妙的地方,我把字符串的value值乘以1000后再加上该字符串是第几个输入进来的i,构成排序时所比较的数字num[]。因为题目规定最多输入100条字符串,所以value大的串势必num要大,即使value相同的串,先输入的串的i要小,所以其num也就要小,这么一来既把字符串与它的value绑定,又避免出现相同数字比较大小的情况,所以快排就一点问题都没有啦!
/**
*poj1007
*@author monkeyduck
*@2013.9.21
*/
#include<iostream>
#include<cstdlib>
using namespace std;
char str[110][55];
int num[100];
int cmp(const void* a,const void* b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int n,m;
cin>>n>>m;
for (int i=0;i<m;i++)
{
cin>>str[i];
int count=0;
for (int j=0;j<n-1;j++)
{
for (int k=j+1;k<n;k++)
{
if (str[i][j]>str[i][k]) count++;
}
}
num[i]=count*1000+i;
}
qsort(num,m,sizeof(num[0]),cmp);
for (int q=0;q<m;q++)
{
cout<<str[num[q]%1000]<<endl;
}
return 0;
}
poj1007 qsort快排的更多相关文章
- qsort 快排函数(C语言)
qsort 快排函数(C语言) 函数原型 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, ...
- 快排 快速排序 qsort quicksort C语言
现在网上搜到的快排和我以前打的不太一样,感觉有点复杂,我用的快排是FreePascal里/demo/text/qsort.pp的风格,感觉特别简洁. #include<stdio.h> # ...
- 结构体快排qsort()
曾经用到过一次快排,感觉代码量没有减小,反而比较函数有点难编,但是这种排序一般不会出错(前提是比较函数写对了),而且速度很快,熟练后其实还是非常好用的! 用到快排是因为我做到一个题,是uva的1042 ...
- 排序方法之标准库中的快排 qsort ()函数
C标准库qsort()函数的用法(快排) 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base, int nelem, int width, i ...
- c语言中使用自带的qsort(结构体排序)+ 快排
c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...
- 数组第K小数问题 及其对于 快排和堆排 的相关优化比较
题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...
- c++实现快排出现错误
#include"header_file.h" using namespace std; void swap(int a,int b) { int t; t=a; a=b; b=t ...
- wikioi 1076 排序 【这里含冒泡、选择、插入以及快排库函数的调用】
/*=================================================================== 1076 排序 题目描述 Description 给出n和n ...
- C语言快排
C语言使用快排的方式有两种,1.直接用库函数stdlib.h里的qsort函数 2.自己编写快排代码(第一种方便,第二种较为自由) qsort 的函数原型是:void qsort(void*base, ...
随机推荐
- Azure File SMB3.0文件共享服务(1)
Azure Storage File是Azure推出的文件共享服务,目前的版本同时支持SMB 2.1和SMB 3.0协议.文件共享服务非常适合那些希望把自己数据中心中使用文件共享的应用程序,在云端需要 ...
- centos vim的安装目录在哪里
[root@test man]# rpm -ql vim-common | grep python/usr/share/vim/vim72/autoload/pythoncomplete.vim/us ...
- USB 传输协议
Pipe USB的pipe的两端分别指的是USB host端的内存区域,和设备端的endpoint. pipe分为两类,一类是stream pipe, 另一类是message pipe. 两类的主要区 ...
- 2014第8周三杂记及web标准学习
昨天遇到一个问题,安卓中mp3默认打开方式的设置,本来如果直接用播放器来查找文件打开没问题,但不知为何播放器只能在历史文件夹中查找,那么在ES文件管理器中找到对应mp3文件后却总是被默认的ES播放器打 ...
- 【DSA MOOC】有序向量二分查找的三个 版本
内容来自 TsinghuaX: 30240184X 数据结构(2015秋) 课程的Vector一章,对有序向量的二分查找有三个版本 三个版本的函数原型是一致的,都是 Rank search(T con ...
- sharepoint 2010 使用自定义列表模版创建列表(2)
前面用的方法是通过界面上操作,根据自定义模版,创建的列表.sharepoint 2010 使用自定义列表模版创建列表(1) 这里顺便记录多另一种方法,通过程序来创建. ---------------- ...
- Sonar入门(二): Maven集成Sonar
Sonar对maven提供了简单可配的支持,要做的事情很简单——在maven/conf下settings.xml <profiles></profiles>标签之间添加如下内容 ...
- iOS GCD详解
前言 对初学者来说,GCD似乎是一道迈不过去的坎,很多人在同步.异步.串行.并行和死锁这几个名词的漩涡中渐渐放弃治疗.本文将使用图文表并茂的方式给大家形象地解释其中的原理和规律. 线程.任务和队列的概 ...
- STL map+vector+struct的使用示例
个人编写的小例子,没有注释,刚毕业时作为技术调研随手编写,仅供参考: #include<iostream> #include<map> #include<vector&g ...
- 第一次用shell脚本来自动运行带参程序
将目录下的part-开头的文件带入程序处理 #!bin/sh FILES=/data5/follow_relation_list_part_00000/part-* file="" ...