首页 > 编程语言 >学不会的排序算法

学不会的排序算法

时间:2023-06-29 20:00:14浏览次数:68  
标签:比较简单 int 元素 long 算法 排序 数据 不会

什么是排序

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。

排序算法的评价标准

(1)时间复杂度(2)空间复杂度(3)排序方式(4)稳定性

废话不多说,我们直接开始吧

选择排序

选择排序(Selection sort)是一种比较简单的排序方式,工作原理是:从待排序的数据中找到,最小(或最大)的数据,将其放在第一个位置;再从剩下的待排序的数据中找到最小(或最大)的数据,将其放在这些数据的第一个位置;直到待排序的数据为零。

原理比较简单,这里就不过多描述,直接附上代码:

#include <iostream>
#define int long long
signed main() {
    int n,min;
    std::cin>>n;
    int a[n + 1];
    for(int i  = 1;i <= n;i ++){//读入要排序的数据
        std::cin>>a[i];
    }
    for(int i = 1;i < n;i ++){
        min = i;
        for(int j = i + 1;j <= n;j ++){//遍历一次a[i]后面的数,找到最小值
            if(a[j] < a[min]){
                min = j;
            }
        }
        //将本次找到的最小值与a[i]交换
        int t = a[i];
        a[i] = a[min];
        a[min] = t;
    }
    for(int i = 1;i <= n;i ++){//遍历输出
        std::cout<<a[i]<<" ";
    }
    return 0;
}

冒泡排序

冒泡排序(Bubble Sort)也是比较基础简单的排序,工作原理就是从第一个位置开始,依次比较两个相邻的元素,如果它们的顺序是错误的,就交换过来,直到没有相邻的元素需要交换,就像气泡慢慢上浮,就像冒泡一样。

原理也比较简单,上代码

#include <iostream>
#define int long long
signed main() {
    int n;
    std::cin>>n;
    int a[n + 1];
    for(int i = 1;i <= n;i ++){
        std::cin>>a[i];
    }
    for(int i = 1;i < n;i ++){
        for(int j = 1;j <= n - i;j ++){
            if(a[j] > a[j + 1]){//如果相邻元素的顺序不对,进行交换
                int t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for(int i = 1;i <= n;i ++){//遍历输出
        std::cout<<a[i]<<" ";
    }
    return 0;
}

插入排序

插入排序(Insertion sort)插入排序是一种简单的排序方法,基本思想是将一个元素插入到一个有序的数据中,从而一个新的,长度增加1的数据,从第二个元素开始,在当前元素位置前面的有序数据中寻找合适的位置(即第i个数据比待插入的元素小,第i + 1个数据比待插入元素大),直到排序完成。

原理依旧比较简单上代码

#include <iostream>
#define int long long
signed main() {
    int n;
    std::cin>>n;
    int a[n + 1];
    for(int i = 1;i <= n;i ++){
        std::cin>>a[i];
    }
    for(int i = 2;i <= n;i ++){
        int t = a[i];//记录待插入元素的值
        int j = i - 1;
        while(t > a[j]){
            a[j + 1] = a[j];
            j -- ;
        }
        a[j + 1] = t;
    }
    for(int i = 1;i <= n;i ++){//遍历输出
        std::cout<<a[i]<<" ";
    }
    return 0;
}

未完,再续……

标签:比较简单,int,元素,long,算法,排序,数据,不会
From: https://www.cnblogs.com/clearTea/p/17488561.html

相关文章

  • MongoDB聚合操作之排序、分页
    聚合操作之排序、分页管道命令之$sort$sort用于将输入的文档排序后输出使用示例如下:查询人物,按照年龄升序db.person.aggregate([{$sort:{age:1}}])查询每个国家的人数,并排序db.person.aggregate([{$group:{_id:"$country",counter:{$sum:1}}},{$sort:{count......
  • bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab 程序
    bp神经网络交叉验证算法和确定最佳隐含层节点个数matlab程序,直接运行即可。数据excel格式,注释清楚,效果清晰,一步上手。"使用交叉验证算法和确定最佳隐含层节点个数的bp神经网络,可以通过编写注释清晰、效果清晰的Matlab程序来处理Excel格式的数据。这个方法可以帮助您快速上手,实现......
  • JS sort排序方法
    Array.prototype.sort()sort()方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的UTF-16码元值升序排序。由于它取决于具体实现,因此无法保证排序的时间和空间复杂度。尝试一下constmonths=['March','Jan','Feb','Dec'......
  • 【改进蚁群算法】 蚁群算法 Dijkstra算法 遗传算法 人工势场法实现二维 三维空间路径
    【改进蚁群算法】蚁群算法Dijkstra算法遗传算法人工势场法实现二维三维空间路径规划本程序为改进蚁群算法+Dijkstra算法+MAKLINK图理论实现的二维空间路径规划 算法实现:原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/636749258569.html1)基于MAKLINK图理论生成地图,并对......
  • 带头结点单链表插入,删除,查找与排序实现一个简单的基于链表结构的学生管理系统
    链表结构和操作方法////CreatedbyAdministratoron2023/6/12.//#ifndefCODE_LINKEDLIST_H#defineCODE_LINKEDLIST_H#include<iostream>#include<cstring>#include<stdlib.h>#include"student.h"typedefstructlink_list{//......
  • MATLAB代码:基于两阶段鲁棒优化算法的多微网联合调度及容量配置
    MATLAB代码:基于两阶段鲁棒优化算法的多微网联合调度及容量配置关键词:多微网优化调度 容量配置两阶段鲁棒 仿真平台:MATLABYALMIP+CPLEX主要内容:代码主要做的是一个微网在四种典型日场景下各电源容量优化配置以及微网的联合优化调度问题,微网的聚合单元包括风电、光伏、燃气......
  • MATLAB代码:基于两阶段鲁棒优化算法的多微网联合调度及容量配置
    MATLAB代码:基于两阶段鲁棒优化算法的多微网联合调度及容量配置关键词:多微网优化调度 容量配置两阶段鲁棒 仿真平台:MATLABYALMIP+CPLEX主要内容:代码主要做的是一个微网在四种典型日场景下各电源容量优化配置以及微网的联合优化调度问题,微网的聚合单元包括风电、光伏、燃气......
  • Hutool—雪花算法
    一、介绍Hutool工具:   官网地址:简介|Hutool   Hutool是一个Java工具库,其中包含了各种实用的工具类和方法。通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自每个用户的精雕细琢,......
  • 代码随想录算法训练营第二十天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索
    669.修剪二叉搜索树思路递归法: 需要思考清楚,如果当前节点<low,那么就返回递归它的右节点,而不是自己取判断,找出来一个合适的节点,这样的话会越想越乱代码:1TreeNode*trimBST_cursor(TreeNode*root,intlow,inthigh){2if(!root)returnnullptr;34if......
  • 负载均衡算法
    轮询(RoundRobin):每一次来自网络的请求轮询分配给内部中的服务器,从1至N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。权重(Weight):根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务......