排序算法整理

2023-11-02

冒泡排序

//bubble sort

     public static void bubbleSort(int[] array, int n){

        int i = 0;// loop

        int j = 0; // element index

        while(i < n) {

           for(j=0; j<n-i-1; j++){

              if( array[j] > array[j+1] ){ //swap condition

                 swap( array, j, j +1 );

               }

           }

           i++;

        }

     }

快速排序

//quick sort

    public static void quickSort(int[] array, int lo, int hi){

        if(lo>hi) return;

        int pivot = array[lo]; 

        int i = lo;

        int j = hi;

        while( i<j ){

            //get smaller after pivot 

            //warning: while condition, here and next while

            //at least one item is >=

            while(i < j && array[j] >= pivot){

                j--;

            }

            array[i] = array[j]; //so at j an element is void

            //get bigger before pivot

            while(i < j && array[i] < pivot){

                i++;

            }

            array[j] = array[i]; // at i an element is to fill at j

        }

        //here, i bumps into j

        array[i] = pivot;

        //here, before index i smaller than pivot, after bigger than pivot

        // lo~i quick sort

        quickSort(array, lo, i-1);  

        // i+1~hi quick sort

        quickSort(array, i+1, hi); 

     }

直接选择排序

//direct select sort

    public static void selectSort(int[] array, int n){

        int i=0; //sorted last element

        int j=0; //unsorted first element

        while(i<n){

            int min=array[i];

            int index = i;

            for(j=i+1; j<n;j++){

                if(array[j]<min){

                    min = array[j];

                    index = j;

                }

            }

            swap(array,i,index);

            i++;

        }

    }

堆排序

 //heap sort

        public static void heapSort(int[] array, int n){    

            for (int i = n / 2 - 1; i >= 0; i--)

                buildHeap(array, n, i);

            int len = n - 1;

            while (len > 0) {           

                swap(array, 0, len);

                buildHeap(array, len, 0);

                len--;

            }

        }

        private static void buildHeap(int[] array, int n, int i){

            for (; left(i) < n; i = left(i)) {

                int bigger =

                    right(i) < n ? max(array, left(i), right(i)) : left(i);

                if (array[bigger] > array[i]) //swap

                    swap(array, bigger, i);

                else break;

            }

        }



    private static int left(int i){

        return 2*i+1;

    }

    private static int right(int i){

        return 2*i+2;

    }

    private static int max(int[] array, int i, int j){

        return array[i]>array[j]? i:j;

    }

直接插入排序

// insert sort

    public static void insertSort(int[] array, int n){

       int i = 1; //unsorted first index

       while (i < n) {

        int j = i - 1; //sorted last index

        int insert = array[i]; //warning: label array[i]

        while (j > 0 && insert < array[j]){                

            array[j + 1] = array[j];

            j--;

         }               

        array[j + 1] = insert; //j+1 is insert pos

        i++;

       }

    }

希尔排序

//shell Sort

     public static void shellSort(int[] array, int n, int group){

        if (group > n) return;

        int d = n / group; //d: number for each group

        while (d > 0){

           for (int i = 0; i < d; i++){

                 int j = i; // number index

                 int k = 1; //distance index

                 while (j < n){

                        int insert = array[j]; //label unsorted first

                        j -= d; //sorted last index

                        while (j > 0 && insert < array[j]){

                            array[j + d] = array[j];

                            j -= d;

                        }

                   array[j + d] = insert; //insert pos: j+d

                   j = i + (++k) * d; //next number index

                }

           }

          d /= 2;

        }

     }   

归并排序

//merge sort

public static void mergeSort(int[] array, int n){

            var sorted = new int[n];

            mergeSort(array,sorted,0,n-1);

  }



 private static void mergeSort(int[] array, int[] sorted, int lo, int hi){

            if (lo < hi){

                int mid = lo + (hi - lo) / 2;

                mergeSort(array, sorted,lo, mid);

                mergeSort(array, sorted, mid + 1, hi);

                merge(array, sorted, lo, mid, hi);

            }

   }

        //beg: part1 beginning index

        //mid: part1 end index

        //mid+1: part2 beginning index

        //end: part2 end index

   private static void merge(int[] array, int[] sorted, int beg, int mid, int end){

            int i = beg; //part1 index

            int j = mid + 1; //part2 index

            int k = 0; //merged index

            while (i <= mid && j <= end)

                sorted[k++] = 

                    array[i] <= array[j] ? array[i++] : array[j++];                

            while (i <= mid)

                sorted[k++] = array[i++];

            while (j <= end)

                sorted[k++] = array[j++];

            for (i = 0; i < k; i++)

                array[beg + i] = sorted[i]; 

     }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排序算法整理 的相关文章

  • 数据结构<1>时间复杂度详解和leetcode例题

    文章目录 什么是时间复杂度和空间复杂度 前言 算法效率 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言 算法效率 算法效率分析分为两种 第一种是时间效率 第二种是空间效率 时间效率被称为时间复杂度 而空间效
  • 剑指offer(简单)

    目录 数组中重复的数字 替换空格 从尾到头打印链表 用两个栈实现队列 斐波那契数列 青蛙跳台阶问题 旋转数组的最小数字 二进制中的1的个数 打印从1到最大的n位数 删除链表的节点 调整数组顺序使奇数位于偶数前面 链表中倒数第k个节点 反转链
  • 剑指 Offer 53 - I. 在排序数组中查找数字 I

    剑指 Offer 53 I 在排序数组中查找数字 I 题目 题目链接 具体代码 题目 题目链接 https leetcode cn com problems zai pai xu shu zu zhong cha zhao shu zi l
  • 二分查找4 - 搜索旋转排序数组

    搜索旋转数组 1 题目 整数数组 nums 按升序排列 数组中的值 互不相同 在传递给函数之前 nums 在预先未知的某个下标 k 0 lt k lt nums length 上进行了 旋转 使数组变为 nums k nums k 1 nu
  • 堆排序(Heapsort)-- 高级排序算法

    1 堆排序 Heapsort 堆排序 Heapsort 是指利用堆这种数据结构所设计的一种排序算法 二叉堆本质上是一种完全二叉树 它分为两个类型 最大堆和最小堆 最大堆任何一个父节点的值 都大于等于它左右孩子节点的值 最小堆任何一个父节点的
  • 快速排序————非递归实现

    二 递归实现快速排序 2 1 为什么我们要去通过递归实现我们的快速排序呢 大家有可能会想是不是因为递归非常的占用空间 我们都知道我们的局部变量是保存在栈上的我们的函数参数也是在栈上开辟的 所以说递归是不是会占用我们非常多的栈空间 同时呢我们
  • 数组实例解析3(杨辉三角)

    根据用户输入的行数n输出对应行数的杨辉三角 具体如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 public class ArrayTraingleTest public static void
  • CH1-绪论

    文章目录 算法时间复杂度的计算 一 冒泡排序简介 从小到大排序 算法时间复杂度的计算 我们一般只关心随着问题规模n趋于无穷时 函数中对函数结果影响最大的项 比如说 T n 3n 3 当n非常大的时候 常数3和n的系数3对函数结果的影响就很小
  • Java往字符串数组中追加一个数据

    public class Test public static void main String args 原字符串数组 String arr 原字符串数据1 原字符串数据2 执行数据添加 arr insert arr 需要追加的字符串数据
  • 四种排序:选择,插入,冒泡,快速排序原理及其对应的时间、空间复杂度解析

    四种排序 选择 插入 冒泡 快速排序原理及其对应的时间空间复杂度 首先 在了解四种排序之前 让我们来了解一下什么是时间复杂度和空间复杂度 时间复杂度 算法的时间复杂度是一个函数 它定性描述该算法的运行时间 记做T n 直白的来说 就是指运行
  • 【数据结构与算法】--排序

    目录 一 排序的概念及其运用 二 常见的排序算法 2 2选择排序 2 3 交换排序 2 3 4 1 快速排序优化 一 排序的概念及其运用 1 1 排序的概念 排序 所谓排序 就是使一串记录 按照其中的某个或某些关键字的大小 递增或递减的排列
  • 【数据结构】排序(直接插入、折半插入、希尔、冒泡、快速、直接选择、堆、归并、基数排序)

    一 什么是排序 排序 将一组杂乱无章的数据按一定规律顺次排列起来 即 将无序序列的数据节点包含多个数据域 那么排序往往是针对其中某个域而言 二 排序方法的分类 1 按数据存储介质可分为 内部排序 数据量不大 数据在内存 无需内外存交换数据
  • 数据结构——哈希排序

    哈希排序 就是用空间换取时间的一种排序方式 空间利用率达O n 算法思想 如果一个元素序列a里没有重复的元素 而我们需要找最大值或者前几个最大值时 怎么办呢 1 将这个a序列排序 然后直接选出目标值 2 开辟一个b数组 a里的每一个元素对应
  • 堆排序专题-把一个数组变成大根堆的两种方式和根据大根堆来实现对数组的排序,

    什么是堆排序 堆排序 Heap Sort 是一种基于二叉堆数据结构的排序算法 它的基本思想是将待排序的数组构建成一个大根堆或小根堆 然后依次将堆顶元素与堆尾元素交换 并重新调整堆 直到整个数组有序 堆排序的时间复杂度为O nlogn 是一种
  • 如何学好C语言的数据结构与算法?

    C语言的数据结构与算法 难就难在链表 学会了链表 可能后面就一点都不难了 书籍推荐 数据结构与算法分析 C语言描述版 要深入学习的话可以选择这本书 因为针对链表的讲解是比较详细的 所以可以很快理解链表 跟着书上一点点实现基本操作 增删改查
  • C#冒泡排序算法

    冒泡排序实现原理 冒泡排序是一种简单的排序算法 其原理如下 从待排序的数组的第一个元素开始 依次比较相邻的两个元素 如果前面的元素大于后面的元素 升序排序 则交换这两个元素的位置 使较大的元素 冒泡 到右侧 继续比较下一对相邻元素 重复步骤
  • C语言排序算法实现

    C语言实现各种排序算法 冒泡排序 选择排序 插入排序 希尔排序 插入方式 非交换方式 快速排序 归并排序 分治思想 基数排序 桶排序 基数排序的基本思想 典型的空间换时间方式 冒泡排序 include
  • 2023华为OD机试真题【双指针/优雅子数组】

    题目内容 如果一个数组中出现次数最多的元素出现大于等于K次 被称为K 优雅数组 k也可以被称为优雅阈值 例如 数组1 2 3 1 2 3 1 它是一个3 优雅数组 因为元素1出现次数大于等于3次 数组1 2 3 1 2就不是一个3 优雅数组
  • 【快速选择算法】O(n)时间复杂度

    快速选择的期望时间复杂度为O n 最坏时间复杂度为O n 2 当每次划分只划分为n 1个和1个时 由于划分时间复杂度为O n 最坏时间复杂度为O n 2 void quickselect vector
  • 分治-归并排序

    文章目录 315 计算右侧小于当前元素的个数 1 题目 2 算法原理 3 代码实现 493 翻转对

随机推荐

  • vue表格展示照片点击放大并可左右切换查看

    一 vue展示后台返回照片集合 前端代码展示
  • 基于机器学习的恶意软件加密流量检测研究分享

    1 概述 2 恶意软件加密流量介绍 3 加密HTTPS流量解析 4 特征工程 5 模型效果 6 具体实施 7 总结 1 概述 近年来随着HTTPS的全面普及 为了确保通信安全和隐私 越来越多的网络流量开始采用HTTPS加密 截止今日 超过6
  • 深度学习模型推理时间与FPS的求取方法,以及time,OpenCV的API教程

    类似深度学习中目标检测的深度学习模型中有两个非常重要的性能指标 一个是MAP就是检测的准确率 另一个就是FPS 就是模型的推理速度 那么我们如何能够知道模型和视频的推理速度呢 接下来我们直接进入正题 一 求取模型的推理时间我们需要借助pyt
  • C语言支不支持重载?

    首先这个问题的答案是C 支持函数重载而C语言不支持函数重载 下面我们从程序编译链接阶段看看其中的原因 先看看重载的定义 函数重载就是指 在同一作用域类 一组函数的函数名相同 参数列表不同 个数不同或类型不同 返回值可同可不同 那么问题来了
  • 风火速打印小程序分析

    这里写自定义目录标题 软件需求背景 分析风火速功能 功能介绍 总结 软件需求背景 类似淘宝 京东第三方卖家需要一个OMS系统 并提供辅助的快递订单打印功能 现在菜鸟物流已标准化了各家快递公司的电子面单 也可以独立对接快递公司 商家需求提供一
  • 高性能Spark作业调优

    在大数据计算领域 Spark已经成为了越来越流行 越来越受欢迎的计算平台之一 Spark的功能涵盖了大数据领域的离线批处理 SQL类处理 流式 实时计算 机器学习 图计算等各种不同类型的计算操作 应用范围与前景非常广泛 在美团点评 已经有很
  • [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始 作者主要写了三个Python系列文章 分别是基础知识 网络爬虫和数据分析 Python基础知识系列 Pythonj基础知识学习与提升 Python网络爬虫系列 Python爬虫之Selenium Phantomjs Cas
  • Thinkphp 如何自动验证及验证规则

    在添加数据或者创建数据的时候 我们一般对数据进行处理 ThinkPHP模型层提供的一种数据验证方法 可以在使用create创建数据对象的时候自动进行数据验证 1 自动验证的用法 namespace Home Model use Think
  • 利用FPGA的DDS直接数字合成产生SPWM正弦调制方波

    1 原理 利用FPGA的DDS产生调制信号 利用计数器产生高频载波三角波 将两路信号通过比较器进行比较 产生调制SPWM方波 1 1 DDS基本结构 三个寄存器 两个加法器 第二个加法器可以输出地址作为ROM数据表模块的输入 从而提取ROM
  • java基础笔记

    java基础自学笔记 前言 一 java的一些基本规则 二 java的面向对象基础 三 抽象 接口 异常基础 接口 匿名类 异常 四 java的gui基础 一 图形界面 二 主要包 三 窗体类 方法 四 布局管理器 方法 BordLayou
  • 【转载】What does MULx operation in SNOW 3G correspond to?

    https crypto stackexchange com questions 72538 what does mulx operation in snow 3g correspond to According to the spec M
  • ENVI入门系列教程---二、图像分析---11.分类后处理

    every blog every motto Live beautifully dream passionately love completely https blog csdn net weixin 39190382 type blog
  • 嵌入式Linux移植0.嵌入式开发环境配置综述

    在开发板上进行Linux开发不同于Ubuntu 需要在PC上开发后编译 移进板子进行执行 因此会设计到各种开发工具 如NFS TFTP服务 QT环境配置 交叉编译器的配置等等 目前刚安装完QT开发环境并且测试通过 虽局限于飞凌的OK335x
  • P1853 守望者的逃离

    include
  • 计算机视觉与智能语音处理融合套件初体验(语音部分)

    本次实验我们使用的是EAIDK计算机视觉 语音处理套件试验箱进行实验 套件介绍 套件简介 EAIDK计算机视觉 语音实验箱以嵌入式人工智能开发套件EAIDK 610为核心 具备语音 视觉等传感器数据采集能力 及适用于多场景的运动控制接口 预
  • C语言---离散数学实验--命题逻辑及其应用(实验报告下载)

    目录 下载链接 设计一个5人表决开关电路 代码实现 确定谁是作案者 代码实现 下载链接 链接 https pan baidu com s 1nDnISBjZjbD6Bf4qqzICsw pwd 1234 提取码 1234 设计一个5人表决开
  • VUE前端实现token的无感刷新

    前言 说实话 这个其实没啥好讲的 要说有复杂度的话 也主要是在后端 实现token无感刷新对于前端来说是一项十分常用的技术 其本质都是为了优化用户体验 当token过期时不需要用户调回登录页重新登录 而是当token失效时 进行拦截 发送刷
  • Spring Boot 整合MyBatis 和 Spring Boot 整合MyBatis-Plus

    目录 Spring Boot 整合MyBatis 代码 配置实现 创建数据库和表 使用灵活的方式创建maven 创建resources application yml 配置数据源参数 并完成Spring Boot 项目启动测试 测试Drui
  • 5种获取JavaScript时间戳函数的方法

    来源 https www fly63 com 一 JavasCRIPT时间转时间戳 JavaScript获得时间戳的方法有五种 后四种都是通过实例化时间对象new Date 来进一步获取当前的时间戳 JavaScript处理时间主要使用时间
  • 排序算法整理

    冒泡排序 bubble sort public static void bubbleSort int array int n int i 0 loop int j 0 element index while i lt n for j 0 j