【算法学习笔记】05.qsort的初步应用
2014-07-29 19:28
183 查看
第一个题比较小,wikioi的1076排序题,先说小题,展示一下qsort的基本用法。
1 待排序数组首地址 //直接用数组名即可
2 数组中待排序元素数量// 比如这里的n 不要太大否则后面的参与进来会出现问题
3 各元素的占用空间大小// sizeof函数来获得,比如int 就用 sizeof(int) 下面还会看到例子
4 指向函数的指针,用于确定排序的顺序 //函数名就是指向函数的指针,此函数的特点是
参数有两个都是 const void *_a,const void *_b
在内部要完成提供给qsort的比较方法。比如返回int 且 返回的是二者的差值,*a-*b,与参数顺序相同则是由大到小,反之亦然
然后写个例题比较深入的利用此函数。
字典:
样例输入
tarp given score refund only trap work earn course pepper part
******
resco nfudre aptr sett coures lony
样例输出
score
:(
part trap tarp
:(
:(
only
代码 基本没有自己的创新。
此解法有一个以前也用过的思维方式,就是先排序的预处理。
因为已经对所有的word进行了sorted处理,所以导致找到重排后相同的单词直接输出即可。
但是此重排,要求两个数组都重排 否则还要考虑下标对应的麻烦。。
此处也可看岛qsort对字典序的处理
需要一个函数strcmp
大概就是这些了,最近一直没怎么写题,接下来应该是鞋cantor数表和蛇形排布复习了,蛇形排布我还是很喜欢的,可以好好地总结一下。
#include <stdio.h> #include <iostream> #include <stdlib.h> using namespace std; int a[100000]; int cmp_int(const void* _a,const void* _b) { int* a=(int*)_a; int* b=(int*)_b; return *a-*b;//从小到大是a-b } int main() { int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } qsort(a,n,sizeof(int),cmp_int); // sizeof (每个元素的类型) for(int i=0;i<n;i++) { cout<<a[i]<<" "; } }首先最关注的一点就是qsort的四个参数。
1 待排序数组首地址 //直接用数组名即可
2 数组中待排序元素数量// 比如这里的n 不要太大否则后面的参与进来会出现问题
3 各元素的占用空间大小// sizeof函数来获得,比如int 就用 sizeof(int) 下面还会看到例子
4 指向函数的指针,用于确定排序的顺序 //函数名就是指向函数的指针,此函数的特点是
参数有两个都是 const void *_a,const void *_b
在内部要完成提供给qsort的比较方法。比如返回int 且 返回的是二者的差值,*a-*b,与参数顺序相同则是由大到小,反之亦然
然后写个例题比较深入的利用此函数。
字典:
样例输入
tarp given score refund only trap work earn course pepper part
******
resco nfudre aptr sett coures lony
样例输出
score
:(
part trap tarp
:(
:(
only
代码 基本没有自己的创新。
#include <stdio.h> #include <string.h> #include <stdlib.h> char word[2000][10],sorted[2000][10]; //虽然是6个字母 但是必须给7个空间 除了字母以外还需要保存其他的东西 int cmp_char(const void* _a,const void* _b) { char* a=(char*)_a; char* b=(char*)_b; return *a-*b; } int cmp_string(const void* _a,const void* _b) { char* a=(char*)_a; char* b=(char*)_b; return strcmp(a,b);//a b 是指针 } int main() { freopen("in13.txt","r",stdin); freopen("out13.txt","w",stdout); int i=0; for(;;) { scanf("%s",word[i]); if(word[i][0]=='*') break; i++; } //i是个数 //为字典中的单词排序 qsort(word,i,sizeof(word[0]),cmp_char); //四个参数中最奇葩的是最后一个,,,函数名 for(int j=0;j<i;j++) { //sorted[j]=word[j]; 二级数组不是一等市民 strcpy(sorted[j],word[j]);//目的数组在前 qsort(sorted[j],strlen(sorted[j]),sizeof(char),cmp_char); } char tem[10]; while(scanf("%s",tem)==1) { qsort(tem,strlen(tem),sizeof(char),cmp_char); int ok =0; for(int k=0;k<i;k++) { if(cmp_string(sorted[k],tem)==0) { printf("%s ",word[k]); ok=1;} } if(!ok) printf(":("); printf("\n"); } }
此解法有一个以前也用过的思维方式,就是先排序的预处理。
因为已经对所有的word进行了sorted处理,所以导致找到重排后相同的单词直接输出即可。
但是此重排,要求两个数组都重排 否则还要考虑下标对应的麻烦。。
此处也可看岛qsort对字典序的处理
需要一个函数strcmp
大概就是这些了,最近一直没怎么写题,接下来应该是鞋cantor数表和蛇形排布复习了,蛇形排布我还是很喜欢的,可以好好地总结一下。
相关文章推荐
- 【算法学习笔记】05.qsort的初步应用
- 算法学习笔记005——栈及应用
- 算法导论学习笔记-5.4 概率分析和指示器随机变量的应用-几个有趣的问题
- 【算法学习笔记】11.数据结构基础 二叉树初步练习4
- 【算法学习笔记】21.算法设计初步 求第k个数 划分法 快排法
- 【算法学习笔记】19.算法设计初步 最大子列和问题的三种方法
- 精确覆盖问题学习笔记(三)——算法的初步实现
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 【算法学习笔记】12.数据结构基础 图的初步1
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 【算法学习笔记】21.算法设计初步 求第k个数 划分法 快排法
- Android应用开发学习笔记(2)应用开发初步体验
- 【几何-图形学算法学习笔记三】缓冲区分析初步实现
- 【算法学习笔记】08.数据结构基础 二叉树初步练习1
- 【算法学习笔记】06.数据结构基础 队列与堆栈初步
- 【算法学习笔记】12.数据结构基础 图的初步1
- 【算法学习笔记】04.C++中结构体定义练习(bign初步)
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 【算法学习笔记】08.数据结构基础 二叉树初步练习1
- 【算法学习笔记】20.算法设计初步 归并排序 求逆序数