快速排序~sort&qsort的用法~以C++
来源:互联网 发布:心动网络 上海 编辑:程序博客网 时间:2024/06/05 18:48
做题的时候经常出现的一种情况就是超时,尤其是排序中的冒泡排序以及快速排序~
这就要用到sort和qsort,在这里呢~就需要知道它们的用法~~
一,sort
1,结构体
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node {char a[20];};char str[100][1010];int cmp(char a,char b){return strcmp(a,b) < 0;}int main (){int n;scanf("%d", &n);for(int i = 0; i < n; ++i)scanf("%s",str[i]);sort(str, str + n, cmp);for(int i = 0; i < n; ++i)printf("%s ",str[i]);return 0;}
2,整型
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int cmp(int a, int b){return a > b;}int main (){int n;int a[10];scanf("%d",&n);for(int i = 0; i < n; ++i)scanf("%d", &a[i]);sort(a , a + n,cmp);for(int i = 0; i < n; ++i)printf("%d ", a[i]);return 0;}
3,实型
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main (){int n;double a[10];scanf("%d",&n);for(int i = 0; i < n; ++i)scanf("%lf", &a[i]);sort(a , a + n);for(int i = 0; i < n; ++i)printf("%lf ", a[i]);return 0;}
4,字符型
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int cmp(char a, char b){return a > b;}int main (){char a[10];scanf("%s", a);sort(a, a + 3,cmp);printf("%s\n", a);return 0;}
二,qsort
1,结构体
#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{int u,w;double v;char str[1010];}b[1010];int cmp(const void *a,const void *b){if((*(node *)a).u==(*(node *)b).u)return (*(node *)b).w-(*(node *)a).w;return (*(node *)a).u-(*(node *)b).u;}int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d %d",&b[i].u,&b[i].w);}qsort(b,n,sizeof(b[0]),cmp);for(i=0;i<n;i++){printf("%d %d\n",b[i].u ,b[i].w);}}
2,整型
#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b){return *(int *)b-*(int *)a;}int main(){int n;int a[1010];scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);}qsort(a,n,sizeof(a[0]),cmp);for(i=0;i<n;i++){printf("%d ",a[i]);}printf("\n");return 0;}
3,实型
#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b){if(*(double *)a>*(double *)b)return 1;return -1;}int main(){double a[1010];int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%lf",&a[i]);}qsort(a,n,sizeof(a[0]),cmp);for(i=0;i<n;i++){printf("%lf ",a[i]);}printf("\n");}
4,字符型
#include<stdio.h>#include<stdlib.h>#include<string.h>char str[100][1010];int cmp(const void *a,const void *b){return strcmp((char *)b,(char *)a);}int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",str[i]);}qsort(str,n,sizeof(str[0]),cmp);for(i=0;i<n;i++){printf("%s\n",str[i]);}return 0;}
个人觉得sort的比较好用~~结构体的最难记~~如下题~~
EXCEL排序
Problem Description
Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
Input
测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有 N
行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
Output
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
Sample Input
3 1000007 James 85000010 Amy 90000001 Zoe 604 2000007 James 85000010 Amy 90000001 Zoe 60000002 James 984 3000007 James 85000010 Amy 90000001 Zoe 60000002 James 900 0
Sample Output
Case 1:000001 Zoe 60000007 James 85000010 Amy 90Case 2:000010 Amy 90000002 James 98000007 James 85000001 Zoe 60Case 3:000001 Zoe 60000007 James 85000002 James 90000010 Amy 90
代码如下~
#include<stdio.h>#include<cstring>#include<stdlib.h>#include<algorithm>using namespace std;struct str{int num;char name[10];int grade;}student[100001];int cmp1(str s1,str s2){return s1.num<s2.num;}int cmp2(str s1,str s2){if(strcmp(s1.name,s2.name)==0)return s1.num<s2.num;return strcmp(s1.name,s2.name)<0;}int cmp3(str s1,str s2){if(s1.grade==s2.grade)return s1.num<s2.num;return s1.grade<s2.grade;}int main(){int n,c,i,j=0;while(scanf("%d%d",&n,&c)&&n!=0){for(i=0;i<n;i++)scanf("%d%s%d",&student[i].num,&student[i].name,&student[i].grade);if(c==1)sort(student,student+n,cmp1);if(c==2)sort(student,student+n,cmp2);if(c==3)sort(student,student+n,cmp3);printf("Case %d\n",++j);for(i=0;i<n;i++)printf("%06d %s %d\n",student[i].num,student[i].name,student[i].grade);}return 0;}
0 0
- 快速排序~sort&qsort的用法~以C++
- 快速排序qsort和sort的用法
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- C/C++ qsort()快速排序的用法
- 快速排序qsort,sort函数用法
- 快速排序 C语言的qsort 以及 C++的 sort
- 快速排序 C语言的qsort及C++的sort
- qsort(快速排序)的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- C++ 排序函数 sort(),qsort()的用法
- 深度学习对抗样本的八个误解与事实
- 斗地主-源码集锦
- BZOJ 2809 [Apio2012]dispatching 可并堆
- iOS前期OC训练OC_省市区字典数组
- 掌阅前端面试总结
- 快速排序~sort&qsort的用法~以C++
- Unity3D:Script 脚本所有编译器属性详解
- C#开发ActiveX控件及制作CAB包
- Android之ListView初步
- 笔记本外接显示器闪烁(水波纹)解决方案
- jeecg公开培训课马上开始8点30
- 分布式jvm并发
- 趣题:构造多边形使得过边界上某一点的任意直线均能等分面积
- hdu 2348 Turn the corner(三分&&几何)(中等)