精华内容
下载资源
问答
  • 多关键字排序3个
    2022-03-25 17:56:03

    在有多个条件的情况下排序,我们一般用结构体cmp来排序。这个时候你就需要想一想,会不会有些题就卡你的这个排序的时间呢?所以我们需要想一想怎么来优化我们的代码。
    现在想一想,怎么来优化。我举个例子:
    有n个数(n <= 800000000),输出他们中最大的。
    我们可以以这个为参考来思考:
    首先我们以第一个数为基准来思考,如果当前输入的数比第一个大,那就更新最大值。按着这个思路,就是先把第一个输入的作为最优解,如果当前的比前面的更优,那么就更新最优解。
    我出一道题:
    问题描述

    庆庆正在研究一个科技创新课题,需要从一堆圆台中选出符合如下条件的圆台:

    1. 下底半径最大。

    2. 若有多个下低半径都是最大的圆台,选择上低半径最小的。

    3. 同时符合以上两个条件的,选择高最大。

    4. 若有多个符合前面三个条件的,选择序号最大的。

    由于圆台数目众多,要从这么多圆台中挑选出符合条件的圆台,也不是一件容易的事情,请你帮助庆庆完成任务。

    首先第一步,输入第一个数据,也是初始的最优解:

    cin>>n;
    cin>>R1>>R2>>H;
    X=1;
    

    第二步,输入每组数据,并判断是否比当前的最优解更优:

    for(int i=2;i<=n;i++){
            cin>>r1>>r2>>h;
            /*
            	第一种情况要替换:下底半径已经比当前最优解的下底半径大
    			第二种情况要替换:下底半径与当前最优解相等且上底半径比当前最优解小
    			第三种情况要替换:下底半径与上底半径和当前最优解一样且高比当前最优解大
    			注意:选择序号大的可以用一个'='来完成,这样的话后面的只要和当前最优解一样就会变成当前最优解 
            */
            if(r1>R1||r1==R1&&r2<R2||r1==R1&&r2==R2&&h>=H){
                R1=r1;
                R2=r2;
                H=h;
                X=i;
            }
        }
    

    最后输出编号X,搞定。
    多关键字排序首先需要以第一个为基准,然后在后面看看是否比当前的最优解更优。重要的就是在你判断更新的条件那块。

    更多相关内容
  • 第二次分配,收集根据主关键字(十位)进行,由于十位不同时,可以迅速判断关键字的前后关系,但十位相同时,才需考虑位,由于在前一趟处理中关键字已经按照排序,所以经过第二次的分配,收集能达到最终排序的...
  • 数据结构——多关键字排序 问题描述:关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科...
  • Python List 按照多个关键字排序

    千次阅读 2021-02-23 20:25:06
    以列表有两列为例,我们需要按照两列排序,可以利用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多多✌️

    展开全文
  • 标题多关键字排序 题目描述: 有N学生的数据,将学生数据按成绩高低排序(高在前低在后),如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序(从小到大),并输出N学生排序后...

    多关键字排序

    题目描述:
    有N个学生的数据,将学生数据按成绩高低排序(高在前低在后),如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序(从小到大),并输出N个学生排序后的信息。

    输入:
    输入数据第一行为整数N(N<=100),接下来的N行包括N个学生的数据。
    每个学生的数据包括姓名(长度不超过20的字符串)、年龄(整数)、成绩(小于等于100的正数)。

    输出:

    按顺序输出学生信息,按照如下格式:
    姓名 年龄 成绩

    样例输入:
    3
    abc 20 99
    bcd 19 97
    bed 20 97

    样例输出:
    abc 20 99
    bcd 19 97
    bed 20 97

    #include <iostream>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    typedef struct student {
        char name[20];
        int age, score;
    }student;
    
    student s[105];
    
    bool compare(student s1, student s2) {
        if (s1.score != s2.score)
            return s1.score > s2.score;
        else if (strcmp(s1.name, s2.name) != 0)
            return strcmp(s1.name, s2.name) < 0;
        else
            return s1.age < s2.age;
    }
    
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; ++i) {
            cin >> s[i].name >> s[i].age >> s[i].score;
        }
        sort(s, s + n, compare);
        for (int i = 0; i < n; ++i) {
            cout << s[i].name << ' ' << s[i].age << ' ' << s[i].score << endl;
        }
        return 0;
    }
    

    注释:

    bool compare(student s1, student s2) {
        if (s1.score != s2.score) //比较成绩,如果不一样,就比较大小
            return s1.score > s2.score; // s1成绩高,就是true,sort的时候排在s2前面
        else if (strcmp(s1.name, s2.name) != 0) // 成绩相同,比较姓名
            return strcmp(s1.name, s2.name) < 0;//<0时,s1.name<s2.name,s1排在前面
        else
            return s1.age < s2.age;
    }
    //返回true的话就是前一个排在前面
    
    展开全文
  • 在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求也不同,因此尚需在总分相同的情况下,按用户提出的...排序方法有很种,这里就要设计程序比较一下内部排序和多关键字排序所用时间的长短。
  • Python多关键字排序(思路清晰)

    千次阅读 2020-09-11 08:40:44
    我们先看看简单的2个关键字排序,有以下两种方式: 先进行第一关键字排序,再进行第二关键字排序; 先进行第二关键字排序,再进行第一关键字排序。 这两种排序顺序,结果会有什么不同吗?很显然,靠后面的关键字...

    1. 问题引入

    在排序问题中,经常会遇到使用多个关键字进行排序。比如说,按照字母顺序对一批学生姓名进行排序,如果第一个字母相同,则按照第二个字母顺序排序,以此类推。这就会导致,多个关键字出现时,怎么去协调关键字的顺序呢?

    2. 解决思路

    我们先看看简单的2个关键字排序,有以下两种方式:

    1. 先进行第一关键字排序,再进行第二关键字排序;
    2. 先进行第二关键字排序,再进行第一关键字排序。

    这两种排序顺序,结果会有什么不同吗?很显然,靠后面的关键字排序,可能会打乱前面关键字的排序。举个简单的例子就很容易理解了。

    在这里插入图片描述

    设列表 lst = [(2, 2), (1, 1), (1, 3)],对该列表进行升序排序,如果第一个元素相同,则按照第二个元素升序排序。

    很显然,第一关键字是第一个元素,第二关键字是第二个元素。

    方式一:先进行第一关键字排序,再进行第二关键字排序

    lst = [(2, 2), (3, 1), (1, 3)]
    lst.sort(key=lambda x: x[0])		# 先对第1个关键字排序
    lst.sort(key=lambda x: x[1])		# 再对第2个关键字排序
    
    print(lst)				# 输出的结果为[(1, 1), (2, 2), (1, 3)]
    

    方式二:先进行第二关键字排序,再进行第一关键字排序

    lst = [(2, 2), (3, 1), (1, 3)]
    lst.sort(key=lambda x: x[1])		# 先对第2个关键字排序
    lst.sort(key=lambda x: x[0])		# 再对第1个关键字排序
    
    print(lst)				# 输出的结果为[(1, 1), (1, 3), (2, 2)]
    

    从上面的例子中可以看出,不同关键字顺序的排序方式导致了最终排序的结果也不同。

    方式二的排序方式才是我们想要的结果;
    方式一的结果为什么错了呢?原因是我们想要第一关键字进行排序,但是进行第二关键字排序时,打乱了第一关键字的排序方式,导致结果不符合我们的预期。

    3. 总结

    在进行多关键字排序时,如果是按照关键字分步进行排序时,按照关键字逆序的顺序进行排序,就能得到我们想要的结果了。比如由3个关键字,应该先进行第三关键字排序再进行第二关键字排序最后进行第一关键字排序

    到这里还未结束,因为我们使用的编程语言是Python,Python列表为我们提供的sort函数功能远不止此。一天天没事做,净整那些花里胡哨的,还有什么是一句Python代码不能搞定的 :

    lst.sort(key=lambda x: (x[0],x[1]))		# 直接按照顺序,第一关键字先,第二关键字后		
    

    如果由N个关键字,可以写成如下:

    lst.sort(key=lambda x: (1关键字 ,2关键字 , ......))
    

    如果有帮助,还望少侠留下你的赞!感谢支持。

    展开全文
  • 多关键字排序。c++

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

    千次阅读 2017-05-10 16:31:04
    多关键字排序就是基数排序,我是用单链表实现关键字的排序的,但最主要的方法仍是“分配”,“收集”。单链表只是在分配与收集过程中起暂时的存储作用。不仅可以用链表,还可以用栈、队列……(都是线性的!!!...
  • 蓝桥杯-奖学金-Python(多关键字排序)
  • 结构体排序(多关键字排序

    千次阅读 2020-03-04 10:01:56
    简要阐述: 在解决问题的时候,经常会有一些排序问题。...多关键字排序中sort()函数和结构体的使用: 1、在结构体中重载比较符" < ": struct node{ int a,b,c; bool operator < (const ...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼请使用"sort.in"作为文件名,且只有1.2.3三个关键字#includeintmain(){inta[1000],b[1000],c[3]={0},temp[1000][2],i,j,n,k=-1,q=0,w=0,e=0,l,u,a2,a3,te=0,d,p;...
  • XDOJ 336 多关键字排序

    2022-01-07 21:53:42
    多关键字排序 题目描述: 有N学生的数据,将学生数据按成绩高低排序(高在前低在后),如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序(从小到大),并输出N学生排序后...
  • 利用多关键字排序进行高考分数处理,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序。 假设待排序的记录数不超过1000,表中...
  • 数据结构 多关键字排序

    千次阅读 2017-12-31 16:12:56
    多关键字排序 一、实验目的   了解关键字的使用范围;编写程序实现关键字的排序。 二、实验原理 依次根据某位进行排序,排好序后更新a[i],最后得到的就是根据每位排好序的a[i]  LSDSort()函数:cnt...
  • 本资源是一个多关键字排序的程序设计,里面包含冒泡排序、快速排序、基数排序的完整代码实现
  • 数据结构:多关键字排序

    千次阅读 2019-08-12 09:32:33
    MulitCompare.c #include<stdio.h> typedef struct _tag_DataElem { char desc[20]; int key1; int key2; } DataElem; int compare1(DataElem* ld,DataElem* rd) { int ret = 0;...r...
  • 排序9.6 基数排序9.6.1 多关键字排序9.6.2 链式基数排序 9.6 基数排序 基数排序又被称为桶排序。与前面介绍的几种排序方法相比较,基数排序和它们有明显的不同。前面所介绍的排序方法都是建立在对数据元素关键字进行...
  • 关键字排序

    2017-06-02 15:40:15
    多关键字排序
  • 多关键字排序的实现

    2013-03-15 11:52:06
    武汉理工大学数据结构课程设计,多关键字排序的实现
  • Excel 如何排序与多关键字排序

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

    2020-12-08 05:18:27
    一、当排序关键字多于1时,我们使用lambda表达式来描述关键字keyarr=[(1,4,3),(1,3,3),(2,1,4),(3,5,1)]arr.sort(key=lambda s:(s[0],s[1])) #两个关键字排序print(arr) # 可以看到输出结果是根据列表中元组的第一...
  • Python语言实现多关键字排序问题

    千次阅读 2020-01-20 10:58:20
    Python语言内置了排序函数,即list对象有一sort()方法以及sorted()函数 sort()方法 该方法会修改列表对象,且该方法的返回值为None,因此不可以将list.sort()赋值给列表 sorted()函数 该函数可以接受一列表...
  • 在单机环境下按关键字对大数据排序需要较长的执行时间,为了提高按关键字对大数据排序的效率,根据Hadoop的MapReduce模型,给出了两种基于Hadoop的多关键字排序方法。方法一在Reduce函数中使用链式基数排序算法...
  • 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);
  • Excel VBA多关键字数据排序

    千次阅读 2020-02-21 19:12:21
    使用Range对象的Sort方法对区域进行排序时,同时最多只能指定3个关键字,当需要按照超过3个关键字对区域进行排序时,可以通过次执行Sort方法实现。需要注意的是,在排序时应按照各关键字的倒叙顺序。例如,如果...
  • 多关键字排序有一定的使用范围。例如:在进行高考分数处理时,除了需要对总分进行排序外。不同的专业单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求排除考生录取的次序。这是我...
  • people.sort(key = lambda x:(x[0],x[1]))

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 415,162
精华内容 166,064
关键字:

多关键字排序3个