三种排序方法:冒泡排序,选择排序,sort()函数排序

2023-11-05

三种排序方法:冒泡排序,选择排序,sort函数排序。
引言:为什么要写呢?因为我怕我忘了,一个寒假过去冒泡排序都不会手写了。
其中的冒泡排序和选择排序为C语言实现,而sort函数排序则借助C++实现,并且还可以用sort函数对结构体进行排序。

  1. 冒泡排序
    原理:在这里插入图片描述
    思路: 设置两个双重循环,第一重循环表示每一次的冒泡次数,即第一个最大值冒泡需要n次比较,第二个最大值需要n-1次比较,以此类推,第二重循环表示相互比较的过程,并根据大小进行交换,当结束循环后,则该数组按照从大到小或者从小到大依次排好,但是由于设置了双重循环,时间复杂度为N*N。
    代码:
#include <stdio.h>
void bouble(int a[],int n)
{
    int i,j,tmp;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j+1]>a[j])
            {
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    }
}
int main()
{
    int i,j,a[20];
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    bouble(a,10);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}
/*45 39 22 8 35 14 7 40 32 19*/
/*39 45 22 8 35 14 7 40 32 19*/
  1. 选择排序:
    原理: 1.从第一个元素出发到最后一个元素,找到其中的最大值或者最小值,然后将它和第一个元素交换,再从第二个元素出发到最后一个,找到其中的最大值或者最小值,然后将它和第二个元素交换,以此类推,当进行完一次遍历的时候,排序就会完成。
    **思路:**首先设置一个for循环代表交换次数也充当被交换的节点,再设置一个循环用于遍历查找最大值或者最小值,内层循环没结束一次,就进行一次交换,当两层循环结束,就完成了排序过程。选择排序的时间复杂度为N*N。
    代码:
#include <stdio.h>
void choose(int a[],int n)
{
    int i,j,tmp;
    int ad=0,maxx=a[ad];//ad用于存放最大值的下标,maxx用于找到存放最大值。
    for(i=0;i<n-1;i++)
    {
        ad=i;maxx=a[ad];
        for(j=i+1;j<n;j++)
        {
            if(a[j]>maxx)
            {
                maxx=a[j];
                ad=j;
            }
        }
        tmp=a[i];
        a[i]=a[ad];
        a[ad]=tmp;
        ad=0;maxx=-1;
    }
}
int main()
{
    int i,j,a[20];
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    choose(a,10);
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}
/*45 39 22 8 35 14 7 40 32 19*/
/*39 45 22 8 35 14 7 40 32 19*/
  1. *sort函数排序:
    介绍:sort()是一个C++库中自带的排序函数,其根源是cmp()函数,使用sort()函数排序时,时间复杂度为:n*log2(n)。
    数组用法: 一共有两种一种是从小到大排序,一种是从大到小排序,默认是从小到大排序。
    sort(a,a+n)//默认从小到大
    sort(a,a+n,less<进行排序的数据类型>());//从小到大
    sort(a,a+n,greater<进行排序的数据类型>());//从大到小

结构体的用法: 需要自己写一个bool类型的cmp函数,在函数内部定义需要如何对结构体进行排序。
步骤: 首先,我们定义一个结构体,然后写一个bool型cmp的排序函数,再在主函数中用sort(vis,vis+n,cmp)即可。
代码:

struct node
{
    int x;
    int y;
}vis[10];
bool cmp(node s1,node s2)
{
    return s1.x>s2.x;//根据x的大小从小到大进行排序
}
int main()
{
	sort(vis,vis+n,cmp);
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三种排序方法:冒泡排序,选择排序,sort()函数排序 的相关文章

随机推荐

  • C++:std::thread

    1 std thread的用法 头文件为 include
  • 【Computer Science】标准输入输出重定向

    本文介绍终端里的输入输出重定向 Windows 下的 cmd 和 Linux 下的 shell 相同 Command 功能 command gt filename 把标准输出重定向到一个文件中 command gt gt filename
  • 软件测试实习面试都问啥?

    软件测试实习面试都问啥 面试问的问题 Day1 April 8th Day2 April 9th Day3 April 10th 面试前的准备 color red heartsuit 实习面试结束 happy 这周我总共面试了三个软件测试的
  • Linux--vim使用

    普通文件编辑 vim 文件名 普通文件 命令行模式 ESC 插入模式 a i o O进入插入模式 末行模式 进入末行模式 q退出 q 强制退出 w保存 wq保存退出 w newfile另存 vim使用进阶 命令行模式下的命令 1 对于光标的
  • 从0到1构建新闻长文本分类系统

    新闻分类系统概述 新闻分类系统 顾名思义 就是对于一片新闻或者是一片文章 进行自动的分类 例如政治 财经 娱乐等等 从技术角度讲 其实属于自然语言处理中比较经典的文本分类问题 当然在一个工业级别的分类系统当中 会遇到各种各样的问题 例如语料
  • 【vulntarget】系列:vulntarget-g 练习WP

    本文仅为学习 vulntarget 在本地环境测试验证 无其它目的 请勿进行未经授权的测试 一 靶场信息 下载地址 百度云链接 链接 https pan baidu com s 1R 9udIuoPavsTI18 lPP3Q pwd ics
  • endl和"\n"的区别

    在C 中 打印字符串时 cout不会自动移到下一行 而想要换行 有两种方式 一种是控制符endl 一种是换行符 n 下面来介绍下两种方式 endl是一个C 符号 表示重起一行 在输出流中插入endl将导致屏幕光标移到下一行开头 C 中还提供
  • 使用带Arduino IDE & WIZ820io的ATmega1284P

    使用带Arduino IDE WIZ820io的ATmega1284P 2013 07 04 Filed under IO模块 and tagged with arduino Arduino IDE atmega1284p RAM问题 W5
  • 解决git push 错误error: src refspec master does not match any. error: failed to push some refs to

    解决git push 错误error src refspec master does not match any error failed to push some refs to 在和远程仓库关联后 我们通过 push 命令将本地仓库的文
  • 装机:MSDT & HEDT 的区别

    MSDT Main Stream Desktop 主流桌面平台 HEDT High End Desktop 高端桌面平台 HEDT平台在很多方面的性能都要比MSDT平台强很多 相对于MSDT平台 HEDT平台通常拥有更多的核心数量 更多的内
  • C#查询ACCESS数据库字段和时间字段

    查询表的所有字段 string Format SELECT FROM 0 TableName 查询表中的一个字段 在ACCESS中将字段用CStr 转换成字符串来判断 string Format SELECT FROM 0 WHERE CS
  • 多协议服务器,多协议远程连接服务器

    多协议远程连接服务器 内容精选 换一换 远程连接Linux云服务器报错 Access denied帐号或密码输入错误 SSH服务端配置了禁止root用户登录的策略 帐号或密码输入错误 检查输入的用户名或密码 Linux云服务器默认用户名ro
  • unity——小球酷跑游戏制作

    课堂课程记录 小球滚动 所有变量与物体名的命名原则都是见名知意 一 创建一个unity项目 二 Create所需3Dobject 1 Player 2 walls 三 添加属性 1 添加在Player上 a 添加Rigidbody组件 b
  • 折半查找

    什么是折半查找 折半查找其实通过字面上的意思就是大致就可以理解为每次查找的时候 选取中间下标的值进行查找 如果找不到 就判断这个要查找的数大于还是小于这个这个中间下标的值 如果大于 就把这个中间值的下标 1给到左边的下标 中间下标 就等于
  • 子域访问计数

    class Solution 利用hash表 对子域名计数 注意对字符串的划分 def subdomainVisits self cpdomains count for domain in cpdomains visits int doma
  • 第十三届蓝桥杯大赛真题PythonB组详解 内含周末献血日记

    前言 今天上午去献血啦 在成都市血液中心 待遇很好 体检通过后先发了一些食物 防止一会饿或者来之前空腹的童鞋 可以看出吃的还是比较不错的 正常的早饭也不会吃那么多 但是泡面的油包不能放 水是甜的加了糖之类的 面包不太好吃 就是纯面包 吃不了
  • 在vue中使用antV-G2展示柱状图

    介绍 G2 是一套基于图形语法理论的可视化底层引擎 以数据驱动 提供图形语法与交互语法 具有高度的易用性和扩展性 使用 G2 你可以无需关注图表各种繁琐的实现细节 一条语句即可使用 Canvas 或 SVG 构建出各种各样的可交互的统计图表
  • overleaf一些技巧(更新中)

    文章目录 前言 格式 技巧 感悟 前言 这种半懂不懂 学不明白的感觉真是太让人着迷了T T 一下来自我在使用overleaf过程中的资料总结 贴出了原地址 找个模板改一改比手撸一篇要快 内容部分来源 LaTeX基本命令使用教程 清晰实例 O
  • javascript之Math

    在javascript中Math是js的内置的对象 其中有很多属性和方法用来操作跟数学相关 属性Math PI Math方法有 Math random 随机数 Math ceil 向上取整 Math floor 向下取整 Math abs
  • 三种排序方法:冒泡排序,选择排序,sort()函数排序

    三种排序方法 冒泡排序 选择排序 sort函数排序 引言 为什么要写呢 因为我怕我忘了 一个寒假过去冒泡排序都不会手写了 其中的冒泡排序和选择排序为C语言实现 而sort函数排序则借助C 实现 并且还可以用sort函数对结构体进行排序 冒泡