这道题比较简单,但通过这个题我学会了使用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快排的更多相关文章

  1. qsort 快排函数(C语言)

    qsort 快排函数(C语言) 函数原型 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, ...

  2. 快排 快速排序 qsort quicksort C语言

    现在网上搜到的快排和我以前打的不太一样,感觉有点复杂,我用的快排是FreePascal里/demo/text/qsort.pp的风格,感觉特别简洁. #include<stdio.h> # ...

  3. 结构体快排qsort()

    曾经用到过一次快排,感觉代码量没有减小,反而比较函数有点难编,但是这种排序一般不会出错(前提是比较函数写对了),而且速度很快,熟练后其实还是非常好用的! 用到快排是因为我做到一个题,是uva的1042 ...

  4. 排序方法之标准库中的快排 qsort ()函数

    C标准库qsort()函数的用法(快排) 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base, int  nelem, int  width, i ...

  5. c语言中使用自带的qsort(结构体排序)+ 快排

    c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...

  6. 数组第K小数问题 及其对于 快排和堆排 的相关优化比较

    题目描述 给定一个整数数组a[0,...,n-1],求数组中第k小数 输入描述 首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n 然后输出n个整形元素,每个数 ...

  7. c++实现快排出现错误

    #include"header_file.h" using namespace std; void swap(int a,int b) { int t; t=a; a=b; b=t ...

  8. wikioi 1076 排序 【这里含冒泡、选择、插入以及快排库函数的调用】

    /*=================================================================== 1076 排序 题目描述 Description 给出n和n ...

  9. C语言快排

    C语言使用快排的方式有两种,1.直接用库函数stdlib.h里的qsort函数 2.自己编写快排代码(第一种方便,第二种较为自由) qsort 的函数原型是:void qsort(void*base, ...

随机推荐

  1. MYSQL 插入二进制数的 2 种方法。

    方法 1.insert into TableName set column =''; 方法 2.insert into TableName .... values(.....); ---------- ...

  2. ArrayList的contains方法(转)

    今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList  但在调用list.contains(user)时总是返回false. 去看了下Arra ...

  3. Oracle EBS-SQL (MRP-3):检查例外信息查询_建议取消_采购订单.sql

    select msi.segment1                                    编码 ,msi.description                           ...

  4. 【写一个自己的js库】 2.实现自己的调试日志

    还是本着学习的目的,实现一个自己的调试日志,界面很简单,就是将调试信息显示在页面的正中央,用一个ul包裹,每条信息就是一个li. 1.新建一个myLogger.js文件,将需要的方法声明一下.其中va ...

  5. 在QTableView中使用各种自定义委托

    QT的MVC(View/Delegate)模型十分强大,可以利用各种控件来对表格的输入进行限制,不过我以前一直没有过,这几天研究了一下,写个小例子,希望大家喜欢. 如果看不懂这个例子,请先看QT的自带 ...

  6. 非自定义和自定义Dialog的介绍!!!

    一.非自定义Dialog的几种形式介绍 转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 前言 对话框对于应用也是必不可少的一个组件,在 ...

  7. sed简单实例练习

    sedfile内容如下: Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Betty Boop: ...

  8. poj 1907 Work Reduction_贪心

    题意:公司要你要完成N份任务,但是你是不可能全部完成的,所以需要雇佣别人来做,做到剩下M份时,自己再亲自出马.现在有个机构,有两种付费方式,第一种是每付A元帮你完成1份,第二种是每付B元帮你完成剩下任 ...

  9. linux内核交互,设备驱动控制管理接口

    1,ioctl preface--starting point ,format,mount volume,in addition to the above file system -- allows ...

  10. MongoDB C driver API continues

    开篇前 <1,mongoc_init() func> mongoc_init() Synopsis void mongoc_init (void); Description This fu ...