首页 > 其他分享 >chapter3-排序和查找

chapter3-排序和查找

时间:2024-02-09 20:11:06浏览次数:34  
标签:sort include 函数 自定义 int chapter3 查找 排序

1.排序

排序就是把一组无序的数据变成有序的过程。对于机试而言,直接使用C++封装好的sort函数就可以了。sort函数内部采用快速排序实现,因此非常高效。使用sort函数,需要引用#include <algorithm>头文件,sort(first_address, last_address, compare)有三个参数,first和last待排序序列的起始地址和结束地址;compare为比较方式。如果不规定第三个参数,则默认是从小到大升序方式。
注意,1、sort函数的地址是左闭右开区间的。2、如果要对给定的数组进行降序排列或以自定义的方式排列,那么第三个参数会起作用。可以通过编写比较函数的方式来实现想要的自定义排序方式。

排序,既包括对内部已经定义的基本数据类型的排序,如整型、字符型等,也包括对自定义数据类型的排序,如结构体或者类。所以要注意,整数是有大小关系的,而结构体变量本身是没有大小关系的,sort函数的默认排序方式无法满足要求,必须依据题面描述写一个自定义的函数才能完成上述要求。
考生在遇到新的排序规则时,只需记住如下这条黄金法则:当比较函数的返回值为true时,表示的是比较函数的第一个参数将会排在第二个参数前面。
所有的比较,最终还是要转换成为对于大小的比较,奇偶性就是考察模2之后值的大小比较,一切比较都是基于两个数之间如何定义它们的大小关系,找出内部的大小关系,设计出合格的Compare比较函数。

1.1整数奇偶排序

//排序-习题3.2 整数奇偶排序 2024-02-09
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

const int MAXN=10+2;
int arr[MAXN];
//自定义比较函数,确定谁在前谁在后
bool compare(int a, int b)
{
    if(a%2 == 1 && b%2 == 1)
    {
        return b < a;
    }else if (a%2 == 0 && b%2 == 0)
    {
        return a < b;
    }else if (a%2 == 1 && b%2 == 0)
    {
        return true;
    }else{//情况4:a为偶数,b为奇数
        return false;
    }
}

int main()
{
    while(scanf("%d", &arr[0]) != EOF)
    {
        for(int i=1; i<10; i++)
        {
            scanf("%d", &arr[i]);
        }
        sort(arr, arr + 10, compare);//注意:sort函数的地址参数是左闭右开的

        for(int i=0; i<10; i++)
        {
            printf("%d", arr[i]);
            if(i != 9)
                printf(" ");
        }
        printf("\n");
    }

    return 0;
}

标签:sort,include,函数,自定义,int,chapter3,查找,排序
From: https://www.cnblogs.com/paopaotangzu/p/18012607

相关文章

  • 力扣递归 两道简单题合成一道中等题之148. 排序链表
    递归归并排序,先找到终点,再合并两个链表 给你链表的头结点 head ,请将其按升序排列并返回排序后的链表。 示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]/** *Definitionforsingl......
  • 通达信竞开强度排序指标公式源码
    {股票指标}今开:(OPEN/REF(CLOSE,1)-1)*100,NODRAW;创业板:=IF(CODELIKE('300'),1,0);排除一字:=REF((((今开<9.8ANDNOT(创业板))OR(今开<19.5AND创业板))=0),0);涨停创:=IF(C>1.1990*REF(C,1)ANDC=H,1,0);涨停主:=IF(C>1.09*REF(C,1)ANDC=H,1,0);涨停数:=(涨......
  • hexo如何修改文章排序
    hexo默认情况下以编写时间的先后来排序,后写的后出现按照以下方法可为文章添加top属性来排序首先在cmd中输入以下命令首先要切入hexo所在的文件夹,否则生成页面会报错npmuninstallhexo-generator-index--savenpminstallhexo-generator-index-pin-top--save然后在文......
  • Array类 冒泡排序 稀疏数组
    Arrays类数组的工具类java.util.Arrays由于数组对象本身并没有方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作;查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使......
  • 通达信角度雷达寻牛排序指标公式源码副图
    {股票指标}ma5:=MA(C,5);MA10:=MA(C,10);MA30:=MA(C,30);角度5:ATAN((MA5/REF(MA5,1)-1)*100)*180/3.14159,LINETHICK2,COLORYELLOW;角度10:ATAN((MA10/REF(MA10,1)-1)*100)*180/3.14159,LINETHICK2,COLORMAGENTA;角度30:ATAN((MA30/REF(MA30,1)-1)*100)*180/3.14159,LIN......
  • 句子嵌入: 交叉编码和重排序
    这个系列目的是揭开嵌入的神秘面纱,并展示如何在你的项目中使用它们。第一篇博客介绍了如何使用和扩展开源嵌入模型,选择现有的模型,当前的评价方法,以及生态系统的发展状态。第二篇博客将会更一步深入嵌入并解释双向编码和交叉编码的区别。进一步我们将了解检索和重排序的理论。我......
  • C++编程练习||1.排序函数模板2.函数模板3.重载printArray函数模板
    1.排序函数模板已知主函数如程序后缀代码所示,请为其编写适当的模板函数,使主函数的bubbleSort函数可以对一个整型数组和一个浮点数数组进行输入、排序、输出操作。#include<iostream>#include<iomanip>usingnamespacestd;template<typenameT>voidbubbleSort(T*arr,......
  • 265-c# list 排序
    List<JObject>itemList=newList<JObject>();foreach(JObjectitemindataTable){itemList.Add(item);}itemList.Sort((a,b)=>{stringa1=a["location"].ToString();stringa2=b["location"].ToString();......
  • hakrevdns 批量执行反向DNS查找的工具
    hakrevdns小型、快速、简单的工具,用于集体执行反向DNS查找。你向它提供IP地址,它返回主机名。这是从IP地址查找属于公司的域和子域的有用方法。安装goinstallgithub.com/hakluke/hakrevdns@latest 用法最基本的用法是简单地将IP地址列表通过管道传输到工具中,......
  • 冒泡排序 Bubble Sort
    一种将无序数组,按递增/减顺序排序的方法从第一个元素和第二个元素开始,依次两两比较,当第n个元素小于第n+1个元素时,两元素交换位置。再从第二个和第三个元素开始重复上述动作直至遍历整个数组时间复杂度:最坏情况:O(N^2)      最好情况:O(N^2)空间复杂度:O(1)/**......