精华内容
下载资源
问答
  • 数据结构——多关键字排序 问题描述:多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科...
  • 直接插入排序,希尔排序,简单选择排序,冒泡排序,快速排序,堆排序,归并排序主要通过某种策略移动,选择或交换关键字来实现,关键字选择上,为了简便起见,都是整形数据。关键字间的比较,也都是直观的大小比较。...
  • 利用多关键字排序进行高考分数处理,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序。 假设待排序的记录数不超过1000,表中...
  • 以列表有两列为例,我们需要按照两列排序,可以利用sorted和lambda组合 l = [['a', 2], ['c', 1], ['d', 4], ['b', 2]] sorted(l, key = lambda x: (x[1], x[0]), reverse = True) 然后结果是 [['d', 4], ['b', 2]...

    最近刷刷题遇到的,发现还没有一模一样的答案,自己做个解答

    以列表有两列为例,我们需要按照两列排序,可以利用sorted和lambda组合

    l = [['a', 2], ['c', 1], ['d', 4], ['b', 2]]
    
    sorted(l, key = lambda x: (x[1], x[0]), reverse = True)
    

    然后结果是

    [['d', 4], ['b', 2], ['a', 2], ['c', 1]]
    

    那如果我们想让第二个关键词按照降序应该怎么搞呢?

    • 如果第二个关键词是数字,就直接可以加负号,负号升序他自己就是降序
    sorted(l, key = lambda x: (x[1], -x[0]), reverse = True)
    
    • 如果关键词不是数字,就加上ord()求其ASCII码排序就行
    l = [['a', 2], ['c', 1], ['d', 4], ['b', 2]]
    
    sorted(l, key = lambda x: (x[1], -ord(x[0])), reverse = True)
    

    这样的结果就是

    [['d', 4], ['a', 2], ['b', 2], ['c', 1]]
    

    搞定
    顺便求最近笔试面试顺利,春招offer多多✌️

    展开全文
  • 在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求也不同,因此尚需在总分相同的情况下,按用户提出的...排序方法有很多种,这里就要设计程序比较一下内部排序和多关键字排序所用时间的长短。
  • 简要阐述: 在解决问题的时候,经常会有一些排序问题。...多关键字排序中sort()函数和结构体的使用: 1、在结构体中重载比较符" < ": struct node{ int a,b,c; bool operator < (const ...

    简要阐述:

    在解决问题的时候,经常会有一些排序问题。一般采用冒泡排序、插入排序,或者利用sort函数排序
    就能解决。但是遇到多关键字的排序,自己写排序算法就可能会挺麻烦的,这里就要利用sort函数。
    多关键字排序中sort()函数和结构体的使用:

    1、在结构体中重载比较符" < "struct node{
    	int a,b,c;
    	bool operator < (const node &n) const{
    		if(a!=n.a) return a>n.a;//第一关键字降序
    		if(b!=n.b) return b<n.b;//第二关键字升序
    		return c>n.c;//第三关键字降序
    	}
    };
    
    2.定义sort函数中的cmp:
    
    bool cmp(const node &n1,const node &n2)
    {
    	if(n1.a!=n2.a) return n1.a>n2.a;//第一关键字降序
    	if(n1.b!=n2.b) return n1.b<n2.b;//第二关键字升序
    	return n1.c>n2.c;//第三关键字降序
    }
    //使用sort(node_array,node_array+n,cmp) 就可以对数组node_array排序。
    
    3.结合lambda匿名函数使用,直接在sort()里面写lambda函数:
    
    sort(node_array,node_array+n,[](node &n1,node &n2)->bool{
    	if(n1.a!=n2.a) return n1.a>n2.a;//第一关键字降序
    	if(n1.b!=n2.b) return n1.b<n2.b;//第二关键字升序
    	return n1.c>n2.c;//第三关键字降序
    };
    

    具体问题:

    例如某次考试一共八道题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上了一对括号,里面有个正数b,则表示该学生AC了这道题,耗去了时间a,同时曾经错误提交了b次。例子可见下方的样例输入与输出部分。

    输入:
    输入数据包含多行,第一行是共有的题数n(1≤n≤12)以及单位罚时m(10≤m≤20),之后的每行数据描述一个学生的信息,首先是学生的用户名(不多于10个字符的字串)其次是所有n道题的得分现状,其描述采用问题描述中的数量标记的格式,见上面的表格。

    输出:
    根据这些学生的得分现状,输出一个实时排名。实时排名显然先按AC题数的多少排,多的在前,再 按时间分的多少排,少的在前,如果凑巧前两者都相等,则按名字的字典序排,小的在前。每个学生占一行,输出名字(10个字符宽),做出的题数(2个字符宽,右对齐)和时间分(4个字符宽,右对齐)。名字、题数和时间分相互之间有一个空格。数据保证可按要求的输出格式进行输出。

    8 20
    GuGuDong 96 -3 40(3) 0 0 1 -8 0
    hrz 107 67 -3 0 0 82 0 0
    TT 120(3) 30 10(1) -3 0 47 21(2) -2
    OMRailgun 0 -99 -8 0 -666 -10086 0 -9999996
    yjq -2 37(2) 13 -1 0 113(2) 79(1) -1
    Zjm 0 0 57(5) 0 0 99(3) -7 0

    问题分析:

    1.首先是多关键字排序:
    第一关键字:AC题数,降序排序
    第二关键字:时间(罚时多少),升序排序
    第三关键字:名字字典排序,升序排序。

    2.然后就是 12(30) 这样的形式如何分开成两个数字读入。
    这里介绍一个sscanf()函数,用法和scanf()差不多,只不过读入的是字符串。
    char score[20];
    scanf("%s",score);
    int t,f;
    int res=sscanf(score,"%d(%d)",&t,&f);

    这样,第一个数字读入t,第二个数字读入f。
    res=1表示只有一个数字;res=2表示有两个数字。

    所有代码

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    struct person
    {
    	char na[20];
    	int sum_count;
    	int penalty;
    	
    }a[10000];
    
    bool cmp(const person &a,const person &b)
    {
    	if(a.sum_count!=b.sum_count)
    		return a.sum_count>b.sum_count;
    	if(a.penalty!=b.penalty)
    		return a.penalty<b.penalty;
    	return strcmp(a.na,b.na)<0;
    }
    int main()
    {
    	int T,pe,count,sum_pe,time[2],flag;
    	scanf("%d %d",&T,&pe);
    	int renshu=0;
    	while(scanf("%s",a[renshu].na)!=EOF)
    	{
    		count=0;
    		sum_pe=0;
    		for(int i=0;i<T;i++)
    		{
    			char score[20];
    			scanf("%s",score);
    			int t,f;
       			int res=sscanf(score,"%d(%d)",&t,&f);
    			if(res==2)//如果读取到两个数
    			{
    				count++;
    				sum_pe=sum_pe+t+f*pe;
    			}
    			else if(res==1)//如果读取到一个数
    			{
    				if(t>0)
    				{
    					count++;
    					sum_pe=sum_pe+t;
    				}
    			}
    		}
    		a[renshu].penalty=sum_pe;
    		a[renshu].sum_count=count;
    		renshu++;
    	}
    	sort(a,a+renshu,cmp);
    	for(int i=0;i<renshu;i++)
    	{
    		printf("%-10s %2d %4d\n",a[i].na,a[i].sum_count,a[i].penalty);
    	}
    	return 0;
    }
    
    
    展开全文
  • 关键字排序关键字排序关键字排序关键字排序
  • 关键字排序

    2017-06-02 15:40:15
    关键字排序
  • 关键字排序。c++

    2020-02-25 18:20:12
    基于多关键字排序/基数排序的长方形排列。

    多关键字排序

    一个长方形有长和宽,分别设为 a 和 b,现在想对一些长方形进行排序。
    有一种新的排序方法。如下:
    我们按照两个长方形的a-b值来对他们按降序排序,如果有重复,按照b值升序排序,如果还有重复,按照输入的顺序排序。

    也就是说,是多关键字排序:

    第1关键字,a-b,降序;

    第2关键字,b,升序;

    第3关键字,输入的顺序,升序;

    输入有多组测试数据(大概100组),每一组测试数据第一行先给出一个整数n,代表有n个长方形需要被排序。
    长方形被从0到n−1标号。
    接下来n行,每一含有两个整数代表每一个长方形a和b
    第i行描述长方形i−1的信息。
    处理到文件末尾。
    所有整数都在[1,100]的范围内。
    对于每一个数据,在一行中输出排好序之后的长方形ID,注意每两个 ID 【之间!】有一个空格,其他地方不要有多余空格

    sample input:
    2
    100 1
    1 2
    3
    100 50
    3 4
    1 2

    sample output:
    0 1
    0 2 1

    思路:
    定义结构体,里面存储对应长方形的三个关键字。
    注意题目中多组测试数据的输入方法。
    对于多关键字排序,也就是基数排序,需要编写对应的cmp函数。
    注意sort函数的用法:sort(begin,end,compare)

    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    struct code
    {
    	int x,y;//长宽
    	int a;//a=x-y;
    	int i;//i顺序,第三关键字 
    }arr[10000];
    bool compare(code m,code n)
    {
    	if(m.a!=n.a)	return m.a>n.a;
    	if(m.y!=n.y)	return m.y<n.y;
    	return m.i<n.i;
    }
    int main()
    {
    	int n;
    	while(scanf("%d",&n)!=EOF)
    	{
    		for(int i=0;i<n;i++)
    		{
    			int w,e;
    			cin>>w>>e;
    
    				arr[i].x=w;
    				arr[i].y=e;
    				arr[i].a=arr[i].x-arr[i].y;
    				arr[i].i=i;
    		}
    		sort(arr,arr+n,compare);
    		for(int i=0;i<n-1;i++) cout<<arr[i].i<<" ";
    		printf("%d\n",arr[n-1].i);
    	}
    	return 0;
    }
    展开全文
  • Excel 如何排序与多关键字排序

    千次阅读 2019-08-28 17:08:17
    Excel 如何排序与多关键字排序 在使用Excel时,对每项录入了数据后,需要对它们进行排序,如何实现呢? 唯一关键字排序 排序前原表格如下: 我们需要以“总分”为关键字排降序, 1、选定“总分”所在的列; 2、...

    Excel 如何排序与多关键字排序

    • 在使用Excel时,对每项录入了数据后,需要对它们进行排序,如何实现呢?

    唯一关键字排序

    • 排序前原表格如下:在这里插入图片描述
    • 我们需要以“总分”为关键字排降序,
    • 1、选定“总分”所在的列;
      在这里插入图片描述
    • 2、点击工具栏右上角的“排序和筛选”里面的“降序”;
      在这里插入图片描述
    • 3、最后点击“排序”即可。
      在这里插入图片描述
    • 结果就是这样的:
      在这里插入图片描述

    多关键字排序

    • 对于总分相同的,我们想按照“语文”降序排列,
    • 难道需要对于每一部分总分相同的,都按“语文”分别排序一次吗?
    • 不需要,可以一次排序搞定!!!
    • 1、选定整块区域;
      在这里插入图片描述
    • 2、点击右上角“排序和筛选”里面的“自定义排序”;
      在这里插入图片描述
    • 3、根据需要依次添加关键字;
      在这里插入图片描述
    • 4、最后点击“确定”。
      在这里插入图片描述
    • 就可以达到想要的效果了!!!
      在这里插入图片描述
    • 以上教程希望能对你有所帮助。
    展开全文
  • Python多关键字排序(思路清晰)

    千次阅读 2020-09-11 08:40:44
    文章目录1. 问题引入2....先进行第一关键字排序,再进行第二关键字排序; 先进行第二关键字排序,再进行第一关键字排序。 这两种排序顺序,结果会有什么不同吗?很显然,靠后面的关键字排序,可能会打乱前
  • 数据结构 多关键字排序

    千次阅读 2017-12-31 16:12:56
    关键字排序 一、实验目的   了解多关键字的使用范围;编写程序实现多关键字的排序。 二、实验原理 依次根据某位进行排序,排好序后更新a[i],最后得到的就是根据每位排好序的a[i]  LSDSort()函数:cnt...
  • Python语言内置了排序函数,即list对象有一个sort()方法以及sorted()函数 sort()方法 该方法会修改列表对象,且该方法的返回值为None,因此不可以将list.sort()赋值给列表 sorted()函数 该函数可以接受一个列表...
  • 排序9.6 基数排序9.6.1 多关键字排序9.6.2 链式基数排序 9.6 基数排序 基数排序又被称为桶排序。与前面介绍的几种排序方法相比较,基数排序和它们有明显的不同。前面所介绍的排序方法都是建立在对数据元素关键字进行...
  • Python 通过某个关键字排序字典列表

    千次阅读 2019-12-20 13:04:51
    文章目录通过某个关键字排序字典列表问题解决方法代码解析 通过某个关键字排序字典列表 问题 假设有一个字典列表,需求是根据某个或者某几个字典字段来排序这个列表? 解决方法 在上篇文章【Python 通过某个字段将...
  • 通过关键字排序字典 Q: 有一个字典列表,想根据某个或某几个字典字段排序这个列表 A: 可以使用operator模块的itemgetter函数来实现 rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David...
  • Python多关键字排序()

    千次阅读 2019-08-09 21:22:01
    让第一个关键字正序,第二个关键字倒序
  • 关键字排序(java)

    千次阅读 2019-09-11 09:03:18
    给定n个学生的学号(从1到n编号)以及他们的考试成绩,表示为(学号,考试成绩),请将这些学生按考试成绩降序排序,若考试成绩相同,则按学号升序排序。 public int[][] multiSort(int[][] array) { // Write your ...
  • 本资源是一个多关键字排序的程序设计,里面包含冒泡排序、快速排序、基数排序的完整代码实现
  • 结构体+多关键字排序

    2019-02-12 23:44:59
    原题https://www.luogu.org/problemnew/show/P1068 题解 结构体+多关键字排序
  • people.sort(key = lambda x:(x[0],x[1]))
  • excel多关键字排序 多条件排序

    千次阅读 2018-03-26 16:32:42
    今天一个做生意的朋友来问关于excel中排序的问题。他的表格内容类似下图诉求是在单号进行排序后的基础上,相同的单号内要按照发货日期进行排序。经过简单学习后,归纳总结如下。对于排序项是excel已支持的排序分类,...
  • c++ sort双(多)关键字排序

    千次阅读 2018-07-24 20:14:02
    struct a{ int x,y; }k[100001]; bool compare(a m,a n){ if(m.x&lt;n.x) return false; if(m.x==n.x){ if(m.y&lt;=n.y) return false; return true; } return true; } sort(a+1,a+10,compare);
  • 关键字排序的实现

    2013-03-15 11:52:06
    武汉理工大学数据结构课程设计,多关键字排序的实现
  • 数据结构课程设计多关键字排序 利用多关键字排序进行高考分数处理,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序 内包涵...
  • 优质文档值得推荐 常见的五类排序算法图解和实现(多关键字排序:基数排序以及各个排序算法的总结)
  • 关键字排序

    千次阅读 2017-05-10 16:31:04
    关键字排序就是基数排序,我是用单链表实现多关键字的排序的,但最主要的方法仍是“分配”,“收集”。单链表只是在分配与收集过程中起暂时的存储作用。不仅可以用链表,还可以用栈、队列……(都是线性的!!!...
  • 按照pair的第二关键字排序需要自定义,需要注意的是优先队列priority_queue的重载和vector等是相反的,即 vector中是从小到大,到了优先队列是从大到小。当然,cmp的写法也有些不同,请参考下面的写法。 比如下面的...
  • python列表多关键字排序

    千次阅读 2017-07-20 13:48:26
    l = ['length_100cm_width_30cm_pict','length_200cm_width_30cm_pict','length_100cm_width_10cm_pict','length_100cm_width_40cm_pict','length_200cm_width_20cm_pict','length_100cm_width_20cm_pict','length_2
  • .txt文档关键字排序

    2014-01-10 10:45:52
    文档关键字排序,载入.txt文档,英文格式,可以查询每个单词的词频,以及词频前十的关键字并且显示

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 361,811
精华内容 144,724
关键字:

如何设置关键字排序