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, ...
随机推荐
- JavaScript学习笔记:数组reduce()和reduceRight()方法
很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...
- js 获取浏览器内核
<script language="JavaScript" type="text/javascript"> var browser = { ...
- delphi 获取北京时间(使用XMLHTTP获取百度的时间,WebBrowser获取www.timedate.cn的时间)
方法一: uses ComObj, DateUtils; function GetInternetTime: string; var XmlHttp: OleVariant; datetxt: str ...
- Delphi与Javascript的交互
网络上也有人写了关于Delphi与Javascript的文章,其大多数使用ScriptControl等,均无法达到与Delphi自身融合的效果.我也是在翻阅自己的组件库的时候发现了这个以前收集来的代码 ...
- 【JavaScript】Object.prototype.toString.call()进行类型判断
权声明:本文为博主原创文章,未经博主允许不得转载. op = Object.prototype, ostring = op.toString, ... function isFunction(it) ...
- 如何优化pom依赖项?
Maven工程通过pom.xml里的<dependency>来定义依赖项.当然,我们不会少定义依赖项,否则编译不通过.不过,如果我们多定义了依赖项虽然不会造成灾难,但可能会造成一些问题,比 ...
- SecureCRT按退格键出现^H问题解决
解决办法一: 解决办法二: ctrl+backspace.即是返回
- getgrent
http://baike.baidu.com/link?url=JNyoNvukL-LP7ayYlNNWLv2gPOzn-bjiwuX1CE_QwUTyrRGCWu4NhDW-JznHQoG4aIfw ...
- cf #214div2
Dima and Guards Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u S ...
- 依赖注入及AOP简述(七)——FQCN请求模式
2.2. FQCN请求模式 为了弥补纯字符串请求模式中的类型安全问题,全类名(FQCN)请求模式就应运而生了.其思想便是,在向容器请求依赖对象的时候,不是通过字符串的标识符.而是通过被请求的依赖 ...