【数据结构与算法】-常见排序算法总结

数据结构中常见的排序算法 目录 稳定性 1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 稳定性 俩个相等的数据,经过排序后,排序算法能保证其相对位置不变。 1.插入排序 特点:数组短,排序效率高;数组相对有序,排序效率也高; 时间复杂度:O(N*2) 空间复杂度:O(1) 稳定 代码: public static void insertSort(int[] arr){ int bound=1; //[0 阅读详情

public class sort {

    private static int count = 0;

    public static void main(String[] args) {
        int[] a = { 4, 2, 1, 6, 3, 6, 0, -5, 1, -2 };
        // Bubble(a); //冒泡
        // SelectSort(a); //选择
        // InsertSort(a); // 插入
        // BinaryInsertSort(a); //二分
        // ShellSort(a,dk,3); //Shell
        QSort(a, 0, a.length - 1); // 快速
        System.out.print("swap次数:" + count + "\n排序结果为:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }

    /**
     * <快速排序>
     * 选取一个基准值,然后使 左边队列的值≦基准值≦右边队列的值
     * 通过递归调用对左右子区间快速排序得到结果
     */
    public static void QSort(int[] a, int low, int high) {
        int i, j, temp;
        if (low < high) {
            i = low;
            j = high;
            temp = a[i];
            while (i < j) {
                while (i < j && a[j] > temp)
                    j--;
                if (i < j) {
                    a[i] = a[j];
                    i++;
                }
                while (i < j && a[i] < temp)
                    i++;
                if (i < j) {
                    a[j] = a[i];
                    j--;
                }
            }
            a[i] = temp;
            QSort(a, low, i - 1);
            QSort(a, i + 1, high);
        }
    }

    /**
     * 希尔排序
     */
    public static int ShellSort(int[] a, int dlta[], int t) {
        int count = 0;
        for (int i = 0; i < t; i++) {
            count = ShellInsert(a, dlta[i]);
        }
        return count;
    }

    public static int ShellInsert(int[] a, int dk) {
        int i, j, count = 0;
        for (i = dk + 1; i < a.length; i++) {
            if (a[i] < a[i - dk])
                a[0] = a[i];
            for (j = i - dk; j > 0 && a[0] < a[j]; j -= dk) {
                a[j + dk] = a[j];
                count++;
            }
            a[j + dk] = a[0];
        }
        return count;
    }

    /**
     * <折半插入排序(二分排序)>
     * 在直接插入排序的基础上,取出下一个元素时,不是扫描插入,
     * 而是通过二分查找的方式确定新元素要插入已排序中的位置,
     * 再直接后移位置,插入新元素。
     */
    public static void BinaryInsertSort(int[] a) {
        int i, j, low, high, m, temp;
        // System.out.println("******二分排序******");
        for (i = 1; i <= a.length; i++) {
            temp = a[i];
            low = 1;
            high = i - 1;
            while (low <= high) {
                m = (low + high) / 2;
                if (temp < a[m])
                    high = m - 1;
                else
                    low = m + 1;
            } // while
            for (j = i - 1; j > high; j--)
                a[j + 1] = a[j];
            a[high + 1] = temp;
        }
    }// BinaryInsertSort

    /**
     * <直接插入排序>
     * 从第一个元素开始,该元素可以认为已经被排好序。
     * 取出下一个元素,在已经排序的元素序列中从后往前扫描
     * 如果已排序的元素大于新元素,则将该元素与后一位的新元素交换位置
     */
    public static void InsertSort(int[] a) {
        int i, j;
        // System.out.println("******插入排序******");
        for (i = 1; i < a.length; i++) {
            for (j = i; j > 0 && a[j] < a[j - 1]; j--) {
                swap(a, j, j - 1);
            }
        }
    }

    /**
     * <冒泡排序>
     * 根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,
     * 凡扫描到违反本原则的轻气泡,就使其向上“漂浮”
     */
    public static void Bubble(int[] a) {
        // System.out.println("******冒泡排序******");
        for (int i = 0; i < a.length - 1; i++) {
            boolean exchange = false;
            for (int j = a.length - 1; j > i; j--) {
                if (a[j - 1] > a[j]) {
                    swap(a, j - 1, j);
                    exchange = true;
                }
            }
            if (!exchange) {
                return;
            }
        }
    }

    /**
     * <选择排序>
     * 首先在未排序序列中找到最小元素,存放到排序序列的起始位置,
     * 然后,再从剩余未排序元素中继续寻找最小元素,放到排序序列末尾。
     * 以此类推,直到所有的元素均排序完毕。
     */
    public static void SelectSort(int[] a) {
        // System.out.println("******选择排序******");
        for (int i = 0; i < a.length; i++) {
            boolean exchange = false;
            for (int j = i + 1; j < a.length; j++) {
                if (a[i] > a[j]) {
                    swap(a, i, j);
                    exchange = true;
                }
            }
            if (!exchange) {
                return;
            }
        }
    }

    /**
     * swap交换函数
     */
    private static void swap(int[] source, int x, int y) {
        count++;
        int temp = source[x];
        source[x] = source[y];
        source[y] = temp;
        /*
         * for (int i = 0; i < source.length; i++) { System.out.print(source[i]
         * + " "); } System.out.println();
         */
    }
}
【数据结构】常见的排序算法 🧧🧧🧧🧧🧧个人主页🎈🎈🎈🎈🎈 🧧🧧🧧🧧🧧数据结构专栏🎈🎈🎈🎈🎈 🧧🧧🧧🧧🧧【数据结构】优先级队列——堆🎈🎈🎈🎈🎈排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称 阅读详情

相关推荐

从原始数据到农学模型:DJI M3M/P4M多光谱影像全链路处理实战

本文详细介绍了使用DJI M3M/P4M多光谱无人机进行农学建模的全链路流程。核心在于强调辐射标定的首要性,它将原始DN值转换为具有物理意义的反射率,是确保后续植被指数计算与模型反演准确性的基石。文章通过大疆智图和Pix4Dfields的实战演示,手把手指导完成数据处理、影像镶嵌及光谱信息提取,最终构建从光谱指数到叶面积指数等关键农学参数的反演模型,实现精准农业分析。

weixin_29281941的博客 244

数据结构中常见的几种排序算法

    数据结构中常见的几种排序算法 快速排序 目录 数据结构中常见的几种排序算法 快速排序 插入排序 希尔排序 归并排序 堆排序 选择排序 冒泡排序 基数排序 快速排序 基本思想: 基准分割法  a) 通过一趟排序将要排序的数据分割成独立的两部分其中一部分所有的数据要比另外的一部分数据都要小  b) 按照此方法对这两部分数据进行快速排序  案例:3 6...

qq_39380590的博客 1万+

OpenClaw Browser Relay Extension 鉴权失败与 invalid handshake 问题的终极解决方案

在使用 OpenClaw 浏览器插件 (Browser Relay Extension) 时,许多用户可能会遇到两个主要问题:一是配置端口错误导致的连接失败,二是鉴权失败 (Gateway token rejected)。本文将详细解析这两个问题并提供解决方案。

gerryke的blog 5561

【数据结构与算法】常见排序算法(Sorting Algorithm)

C语言 冒泡排序(Bubble Sort) 快速排序(Quick Sort)插入排序(Insertion Sort) 希尔排序(Shell Sort)选择排序(Selection Sort) 堆排序(Heap Sort) 归并排序(Merge Sort)hoare快速排序 挖坑快速排序 双指针快速排序 非递归版快速排序 归并排序非递归版 计数排序(CountSort)

m0_52602233的博客 1454

activiti(六):activiti7的数据表和字段的解释

介绍activiti7的数据表和各表字段的含义,对于学习activiti7工作流引擎的运行过程很有帮助!

no problem的博客 1万+

《商用密码应用与安全性评估》第四章密码应用安全性评估实施要点4.1密码应用方案设计

密码应用方案设计

qq_40442137的博客 1475

【数据结构】八种常见的排序算法

思路: 创建左右指针。⾸先从右向左找出⽐基准⼩的数据,找到后⽴即放⼊左边坑中,当前位置变为新的"坑",然后从左向右找出⽐基准⼤的数据,找到后⽴即放⼊右边坑中,当前位置变为新的"坑",结 束循环后将最开始存储的分界值放⼊当前的"坑"中,返回当前"坑"下标(即分界值下标)稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的 相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,⽽在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;

王璐WL的博客 1万+

Qt快速读取Excel文件

网上很多读取方式都是如下形式,太慢了,打开文件+读取文件要6s以上,实在是受不了! QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); QAxObject *work_books = excel.querySubObject("WorkBooks"); work_boo...

c+c++的博客 2万+

数据结构篇——五分钟带你记住常见排序算法口诀

一、前言 二、引言 1、概念 2、与生活相关

ac不知深的博客 5358

【永磁同步电机】simulink永磁同步电机PMSM矢量控制【含Matlab源码 7372期】

simulink永磁同步电机PMSM矢量控制 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1029

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1810

数据结构的常见排序算法

假设都用升序来,降序就是反过来打印数组 和 交换位置。

qq_62918030的博客 490

MuJoCo 入门教程(一)

在 MuJoCo 仿真中输入自定义数字有三种方法。首先,可在 XML 中定义全局数字字段。它们有一个名称和一个实数值数组。其次,可以通过特定元素的自定义数组来扩展某些模型元素的定义。具体方法是在 XML 元素大小中设置 nuser_XXX 属性。第三,数组 mjData.userdata 不用于任何 MuJoCo 计算。用户可以在这里存储自定义计算的结果;请记住,所有随时间变化的内容都应存储在 mjData 中,而不是 mjModel 中。自定义文本字段可以保存在模型中。

机器人控制与仿真应用 1万+

数据结构与算法 - 常见的查找与排序算法

本文基于python介绍了算法基础、时间空间复杂度、列表查找、排序

xian_x_的博客 1306

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

12,常见的数据结构和排序算法

文章目录常用数据结构栈(stack)栈的实现队列(queue)队列的实现双向队列(deque)双向队列的实现常用排序算法冒泡排序(bubble sort)选择排序(select sort)插入排序 常用数据结构 栈(stack) 栈,也被称为栈堆,是一种容器,支持存入元素、访问元素和删除元素。 栈的特点为只允许从容器的一端(栈顶)进行加入数据(push)和输出数据(pop)的运算。 栈没有位置的概念,保证可以访问、删除的都一定是最后存入的那个元素。这是一种默认的访问顺序。 由于栈数据结构只允许在一段进行操作

weixin_41965423的博客 429

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

常见的数据结构、查找与排序算法

6、堆排序:利用堆的性质(父节点值大于或等于子节点值)进行排序,首先构建大顶堆或小顶堆,然后依次将堆顶元素与末尾元素交换并调整堆结构。1、顺序查找:从列表的第一个元素开始,依次比较直到找到要查找的元素或搜索到最后一个元素。适用于数据量较小的列表。2、链表:物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现。5、树:如二叉树、红黑树、AVL树等,具有层次关系的集合,常用于高效查找和排序。1、冒泡排序:通过相邻元素之间的比较和交换,使较大的元素逐渐“浮”到序列的末尾。

DKPT的博客 564

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构-常见的排序算法

希尔排序的。

mlisda的博客 1134

数据结构之常见排序算法

数据结构之常见排序算法

m0_69468924的博客 1357

常见的数据结构Java实现及常见的排序算法

文章目录一、常见数据结构Java实现1、链表2、栈3、队列4、树二、排序算法1、冒泡排序2、选择排序3、插入排序4、归并排序5、快速排序 一、常见数据结构Java实现 1、链表 (1)leetcode提供结构 public class ListNode{ int val; ListNode next; ListNode(int x) { val = x; ...

luyangsiyi的博客 246

数据结构之常见排序算法汇总

最近校招又陆续开始啦!为了能在笔试中取得好成绩,从而赢取面试机会,并最终进入理想的公司,同学们又得开始好好备战啦!学计算机的同学都知道,数据结构是一门很重要的课程,笔试面试也经常考到问到,特别是那些排序算法,更是经常考。我在找实习时,也重新温习过数据结构,不过平时用的不是很多,也忘的差不多了。这次为了备战校招,同时也为了方便大家复习,我整理了所有常见的排序算法,跟大家一起重新温故一下。有不对的地方

萧鉴哥的专栏 1251

常见的数据结构操作以及排序算法的时间复杂度汇总

常见数据结构操作时间复杂度汇总 排序算法时间复杂度汇总

weixin_44387066的博客 996

常见数据结构和排序算法复杂度

常见数据结构和排序算法时间复杂度

zq980328的博客 619

【数据结构——数组(五)】常见排序算法总结

public class sort { private static int count = 0; public static void main(String[] args) { int[] a = { 4, 2, 1, 6, 3, 6, 0, -5, 1, -2 }; // Bubble(a); //冒泡 // Select...

Lily_9的博客 354

【Java 数据结构】常见排序算法(上)

本期主要讲解: 1、 认识排序 2、常见排序的分类 3、直接插入排序 4、希尔排序(缩小增量排序) 5、选择排序 6、堆排序

程序猿教你打篮球的博客 4467

数据结构之常见六大排序算法

排序算法是一种将一组元素按照特定顺序排列的算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。

weixin_45338443的博客 842

std中稳定排序算法_数据结构中常见的8种排序算法的C++代码实现

//整理者:LXZ-2008百度文库笔名:锡永//时间:2011/9/29//学校:CUMT2012届毕业计算机科学与技术学院计算机科学与技术专业//内容:数据结构中常见的8种排序算法的C++代码实现//全是内排序,稳定的排序算法:冒泡,插入,归并,基数//不稳定的排序算法:希尔,快速,堆,选择//邮箱:706625262@qq.com(仅供交流,不做技术支持)//备注:我想大家在大二的时候可能...

weixin_29671351的博客 220
上一篇: hadoop完全分布式环境启动步骤说明
下一篇: 【Java基础总结】-Java笔试易错点 第一篇
gamedev˚
博客等级 码龄12年 280粉丝 293原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值