排序算法-示例

Java排序算法详解及示例汇总——超详细 冒泡排序、选择排序、直接插入排序、二分法排序、希尔排序、快速排序、堆排序、归并排序、基数排序,共9中排序算法详解和代码示例。示例中全部采用从小到大排序,编码方式为本人理解的思路,算法思想也是自己理解的口语表达方式,若想查看更准确的算法思想和代码示例可直接搜索各算法的百科示例源码地址一、冒泡排序1、算法思想两两比较,如果后者比前者大则交换位置每遍历一圈最大的数就会冒到最后,则确定了本轮比较中的最大值... 阅读详情

一 排序算法总结

常见排序算法用Java编程语言的代码实现

1 冒泡排序

大的值从左向右逐步的移动,右侧部分逐步稳定,向左侧扩展 ;时间复杂度 O(n^2)

/**
     * 冒泡排序
     * @param array
     */
    public void bubbleSort(Comparable[] array) {
        int N = array.length;
        for (int i = 1; i <N ; i++) {
            boolean flag= true ;
            for (int j = 0; j <N-i ; j++) {
                if(less(array[j+1], array[j])){
                    exchange(array,j,j+1);
                    flag = false ;
                }
            }
            // 代表队列已经有序 ,不需要再检查排序
            if(flag) break;
        }
    }
    // 比较大小
   public static boolean less(Comparable l, Comparable r) {
        return l.compareTo(r) < 0;
    }
       
    // 交换位置
    public static void exchange(Comparable[] array, int i, int j) {
        if (i == j) return;
        Comparable temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

2 选择排序

每次选出最小值 放入左侧的位置 ,左侧稳定向右侧扩展 ;时间复杂度 O(n^2)

     /**
     * 选择排序算法  每次选出最小值 放入左侧的位置
     * @param array
     */
    public void selectSort(Comparable[] array) {
        int N = array.length;
        for (int i = 0; i < N; i++) {
            int min = i;
            for (int j = i + 1; j < N; j++) {
                if (less(array[j], array[min]))
                    min = j;
            }
            exchange(array, i, min);
        }
    }

3 插入排序

左侧有序 ,指针从左向右移动, 将指向的额值逐步与左侧相邻的比较直至插入左侧合适位置 ;时间复杂度 O(n^2)

     /**
     * 插入排序  左侧有序  将小值插入左侧合适位置
     * @param array
     */
    public void insertSort(Comparable[] array) {
        int N = array.length;
        for (int i = 1; i < N; i++) {
            for (int j = i; j > 0; j--) {
                // 依次轮换位置
                if (less(array[j], array[j - 1])) {
                    exchange(array, j, j - 1);
                }
                // 也可先保留tmp=array[i]位置,大的值先右移, 找到j后再插入
            }
        }
    }

4 希尔排序

间隔的比较然后交换位置

      /**
     * 希尔排序  插入排序的改进
     */
    public void shellSort(Comparable[] array) {
        int N = array.length;
        int step = 1;
        while (step < N / 3) step = 3 * step + 1;
        while (step >= 1) {
            for (int i = step; i < N; i++) {
                for (int j = i; j >= step; j -= step) {
                    if (less(array[j], array[j - step])) {
                        exchange(array, j, j - step);
                    }
                }
            }
            step = step / 3;
        }
    }

5 归并排序

采取分治的思路进行排序

 
/**
     * 迭代式归并排序
     * @param array
     */
    public void mergeBottomSort(Comparable[] array) {
        int N = array.length;
        aux = new Comparable[N];
        for (int step = 1; step < N; step = step + step) {
            for (int lo = 0; lo < N - step; lo += step + step) {
                merge(array, lo, lo + step - 1, Math.min(lo + step + step - 1, N - 1));
            }
        }
    }
    /**
     * 归并排序
     */
    Comparable[] aux;
    public void sort(Comparable[] array) {
        aux = new Comparable[array.length];
        sort(array, 0, array.length - 1);
    }
    protected void merge(Comparable[] array, int lo, int mid, int hi) {
        int i = lo;
        int j = mid + 1;
        for (int k = lo; k <= hi; k++) {
            aux[k] = array[k];
        }
        for (int k = lo; k <= hi; k++) {
            if (i > mid) array[k] = aux[j++];
            else if (j > hi) array[k] = aux[i++];
            else if (less(array[j], array[i])) array[k] = aux[j++];
            else array[k] = aux[i++];
        }
    }
    private void sort(Comparable[] array, int lo, int hi) {
        if (lo >= hi) {
            return;
        }
        int mid = lo + (hi - lo) / 2;
        sort(array, lo, mid);
        sort(array, mid + 1, hi);
        merge(array, lo, mid, hi);
    }

6 快速排序


 /**
     * 快速排序 
     * @param array
     */
    public void quickSort(Comparable[] array) {
        quickSort(array, 0, array.length - 1);
    }
    private void quickSort(Comparable[] array, int lo, int hi) {
        if (hi <= lo) return;
        int j = partition(array, lo, hi);
        quickSort(array, lo, j);
        quickSort(array, j + 1, hi);
    }
    private int partition(Comparable[] array, int lo, int hi) {
        int i = lo, j = hi + 1;
        Comparable v = array[lo];
        while (true) {
            while (less(array[++i], v)) if (i == hi) break;
            while (less(v, array[--j])) if (j == lo) break;
            if (i >= j) break;
            exchange(array, i, j);
        }
        exchange(array, lo, j);
        return j;
    }
    private int partitionFor(Comparable[] array, int lo, int hi) {
        int pivot = lo, j = pivot + 1;
        Comparable v = array[lo];
        for (int i = j; i <=hi; i++) {
            if(less(array[i],array[pivot])) {
                exchange(array, i, j);
                j++;
            }
        }
        exchange(array, pivot, j-1);
        return j-1;
    }

7 堆排序


/**
     * 堆排序 
     * @param array
     */
    public Comparable[] heapSort(Comparable[] array){
        int len = array.length ;
        buildMaxHeap(array, len);
        for (int i = len-1; i >0; i--) {
            exchange(array , 0,i);
            len--;
            heapify(array,0,len);
        }
        return array ;
    }
    private void buildMaxHeap(Comparable[] arr , int len){
        for (int i = (int) Math.floor(len/2); i >=0 ; i--) {
            heapify(arr,i,len);
        }
    }
    private void heapify(Comparable[] array, int i, int len) {
        int l = 2*i + 1;
        int r = 2*i +2 ;
        int largest = i ;
        if(l < len  && less( array[largest], array[l])) {
            largest = l ;
        }
        if(r < len  && less( array[largest], array[r])) {
            largest = r ;
        }
        if(largest !=i ){
            exchange(array,i,largest);
            heapify(array,largest ,len);
        }
    }

8 计数排序


/**
     * 计数排序 与数组下标类型有关联,有局限,当然 可以转换为Map形式sortedMap ,
     * @param array
     */
    public int[] countSort(int[] array){
        int max = getMaxValue(array);
        return countingSort(array,max);
    }
    private int[] countingSort(int[] array , int max){
        int bucketLen = max +1 ;
        int[] bucket = new int[bucketLen];
        for (int v : array) {
             bucket[v]++ ;
        }
        int index=0 ;
        for (int i = 0; i <bucketLen ; i++) {
            while (bucket[i]>0){
                array[index++] = i;
                bucket[i]--;
            }
        }
        return array ;
    }
    private int getMaxValue(int[] array){
        int max = array[0] ;
        for (int v : array){
            if(less(max,v)){
                max= v;
            }
        }
        return max ;
    }

C++十大排序算法示例 阅读详情

相关推荐

C++库中的排序算法实现及编程示例

以上是C++标准库中几个常用的排序算法的实现及其使用示例。通过使用这些排序算法,您可以方便地对各种类型的数据进行排序操作。请根据您的具体需求选择合适的排序算法,并结合示例代码进行使用。排序算法是计算机科学中常用的基本算法之一,用于将一组数据按照特定的顺序进行排列。C++标准库中提供了多种排序算法的实现,本文将介绍其中一些常用的排序算法,以及它们的使用示例。

CyberFlare的博客 83

几种常见排序算法总结(个人理解与代码实现)

冒泡,快速,希尔,插入,选择

逃离那片云的博客 540

Python详解:排序算法实现及示例代码

本文详细介绍了几种常见的排序算法的原理和实现方法,并提供了相应的Python示例代码。其基本思想是从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序错误,则交换它们的位置。其基本思想是将列表分为已排序和未排序两部分,逐个将未排序部分的元素插入到已排序部分的正确位置。其基本思想是选择一个基准元素,将列表分为小于基准元素和大于基准元素的两部分,然后对这两部分分别进行快速排序。其基本思想是从列表中选择最小(或最大)的元素,并将其放置在已排序部分的末尾。本文将介绍几种常见的排序算法,并提供相应的示例代码。

code88888的博客 157

十大排序算法 思路+图解+代码示例【排序算法】

摘要: 这里罗列了常见的十大排序算法,通过注解、思路、图解、代码来快速了解各种排序算法的原理。

李赛赛的专栏 1376

用Python turtle库 绘制皮卡丘

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 turtle基础知识参考: https://gitchat.blog.youkuaiyun.com/article/details/90696190 https://blog.csdn.ne...

qq_36295856的博客 2万+

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1663

排序算法的c实现示例

c库排序算法只有快速排序qsort的实现,效率较高,非递归。 也没有必要采用其它排序算法。 基于网上资料(都是对int数组进行排序),本版本的实现,全部改为类似qsort的实现,适合任意结构的排序。 排序算法列表: 冒泡 选择 插入 希尔 归并 快速排序(递归版本) 快速排序(glibc版本) 快速排序(c语言自带版本直接调用qsort) #include <stdio.h> #inc...

weixin_43172531的博客 192

新手必看!Unity中Tag和Layer的7个实际应用场景(含MOBA案例)

本文深入探讨Unity中Tag和Layer的7个实际应用场景,特别以MOBA游戏开发为例,详细解析如何利用LayerMask进行高效场景管理和碰撞检测优化。从双相机方案到射线检测的精准控制,帮助开发者掌握这些基础功能的进阶用法,提升游戏性能和开发效率。

weixin_28723171的博客 313

七种常见的VB排序算法示例程序

七种常见的VB排序算法示例程序 加入了微秒级的计时器,各种不同算法的速度马上就能比较出来了,有的算法还真的是从没听说过,看也看不懂。 cmbSorts.AddItem "冒泡排序法" cmbSorts.AddItem "插入排序法" cmbSorts.AddItem "Bucket排序法" cmbSorts.AddItem "选择排序法" cmbSorts.AddItem "She

8480

OpenEuler22.03 LTS下Zabbix7.0监控系统的容器化部署避坑指南(含Docker-Compose完整配置)

本文详细介绍了在OpenEuler22.03 LTS操作系统上容器化部署Zabbix7.0监控系统的完整流程,包括Docker引擎配置、Docker-Compose编排、网络模式选择及性能调优等关键步骤。针对OpenEuler环境下的特殊问题提供了解决方案,帮助用户高效搭建稳定可靠的监控系统。

python9snake的博客 267

Tessent_StdcellLib

第二种为 Tessent Cell lib,既可用于功能仿真,也可以用于测试逻辑插入。lib包含了用于仿真的功能信息,也包含DFT cell属性。如何使用tessent工具将stdcell verilog 仿真模型转换为tessent自己的lib。运行后工具会生成一个atpg的lib文件,打开文件,找到一个带SI的DFF,只有功能描述。tessnt lib分为两种,第一种为ATBG lib,可以用于仿真;打开生成的lib文件,多了dft_cell_selection。第二部:编写attributes文件。

qq_40411444的博客 2134

用python排序算法_PyThon排序算法的用法及示例

相信有很多朋友在听别人讲关于python的排序算法时,经常觉得云里雾里吧,其实关于python的排序算法一共就五大内容,小编给大家梳理了一遍,内容非常简单易懂,一起来看看吧~1、冒泡排序冒泡排序将逐步遍历列表并比较相邻的元素对。如果元素的顺序错误,则会交换这些元素。重复对列表中未排序部分的遍历,直到对列表进行排序。示例代码:def bubble_sort(arr):def swap(i, j):a...

weixin_39638309的博客 180

python 常见算法(1-50题)

常见的算法题

weixin_58470558的博客 1755

php排序算法代码,常见排序算法 php示例代码

//常见排序算法//快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法//Shell排序//鸡尾酒排序//堆排序//冒泡排序算法/** 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。* 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。* 这个算法的名字由...

weixin_35747051的博客 285

倒立摆的PLC控制(模型分析+ SCL源代码)

首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆的运动方程。

RXXW_Dor的博客 3327

飞牛fnNAS文件的超快检索

本文介绍了如何在NAS系统中部署fsearch文件搜索工具,以解决海量文件检索效率低下的问题。通过Docker容器部署ayound/file-search镜像,建立缓存和数据目录后,用户可通过8012端口访问fsearch界面。该工具支持快速关键字检索,速度媲美PC端的Everything,但需等待索引完成才能获得完整结果。虽然文件预览功能有待完善,但其高效的搜索性能值得推荐。文章还提及可通过zerotier实现远程访问,并提供了相关技术博客的参考链接。

dgnankai的专栏 1147

所有排序算法,稳定,实现,时间复杂度,示例

稳定排序你要排序的对象推荐算法小数据、教学冒泡 / 插入大数据、稳定归并排序速度优先快速排序不要求稳定、原地堆排序整数范围小计数 / 桶排序整数位数不大基数排序当然可以!这里我给你列出每个常用排序算法的示例排序前数组排序后数组排序过程简单说明(便于理解)原始数组:{5, 2, 9, 1, 5, 6}

zjkyeah的博客 935

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java爬虫代码示例_Java实现8种排序算法的示例代码

大家好,我是青秧!这篇文章主要介绍了8种JAVA实现排序算法的示例代码,源自网络整理,希望可以帮助大家更好的理解和学习,感兴趣的朋友可以了解下冒泡排序 O(n2)两个数比较大小,较大的数下沉,较小的数冒起来。public static void bubbleSort(int[] a) { //临时变量 int temp; //i是循环次数,也是冒泡的结果位置下标,5个数组循环5次 for ...

weixin_39757626的博客 155

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

常用排序算法代码示例

常用排序算法及其测试用例 import org.junit.Test; /** * 排序算法的通用测试模板 * Create By Luo Qiliang on 2021/3/2. */ public class Example { /** * 排序算法的核心代码 * @param a */ public static void sort(int[] a) { } /** * 对两个元素进行比较 * @para

Qiliang Luo的博客 376

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python计数排序_Python实现的计数排序算法示例

本文实例讲述了Python实现的计数排序算法。分享给大家供大家参考,具体如下:计数排序是一种非常快捷的稳定性强的排序方法,时间复杂度O(n+k),其中n为要排序的数的个数,k为要排序的数的组大值。计数排序对一定量的整数排序时候的速度非常快,一般快于其他排序算法。但计数排序局限性比较大,只限于对整数进行排序。计数排序是消耗空间发杂度来获取快捷的排序方法,其空间发展度为O(K)同理K为要排序的最大值。...

weixin_39761422的博客 149

排序算法 (Sorting Algorithms)-Python示例

本文提供了Python实现的经典排序算法示例,包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序和计数排序。每种算法都包含详细的Python实现代码、时间复杂度分析(从O(n²)到O(n log n)不等)、空间复杂度说明和稳定性判断。示例代码结构清晰,包含排序函数定义、辅助函数和测试用例,可直接运行验证排序效果。这些算法涵盖了不同场景下的排序需求,从小规模数据到大规模数据,从简单实现到高效实现,为开发者提供了全面的排序算法参考实现。

在全栈和前端徘徊的程序员 740

排序算法 (Sorting Algorithms)-JS示例

本文介绍了排序算法的基本概念、核心特性和常见分类,并提供了6种经典排序算法的JavaScript实现。排序算法分为比较排序和非比较排序两类,核心特性包括稳定性、时间/空间复杂度等。文中详细展示了冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序的JS代码实现,每种算法都配有示例数组演示排序过程。这些算法涵盖了从简单到高效的多种排序方法,包括O(n²)和O(n log n)时间复杂度的实现,为开发者提供了完整的排序算法参考方案。

在全栈和前端徘徊的程序员 613

排序算法-选择排序(含C语言代码示例)

选择排序是一种简单直观的排序算法,其基本思想是在待排序序列中找到最小(或最大)元素,然后将其与序列的起始位置进行交换。重复这个过程,每次在剩余未排序的序列中选择最小(或最大)元素,并与当前未排序部分的第一个元素交换位置,直到整个序列有序为止。选择排序的时间复杂度为O(n^2),其中n是待排序序列的长度,而空间复杂度为O(1)。重复以上步骤,直到整个序列有序。选择排序的优点是简单易实现,不需要额外的空间,但缺点是其时间复杂度相对较高,特别是在大规模数据集上。

weixin_52185996的博客 1018

排序算法:选择排序算法思想与代码示例

选择排序算法也是比较简单的排序算法,选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。 选择排序算法 通过选择和交换来实现排序,以从小到大排序为例,其排序流程如下: (1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。 (2)接着从剩下的n - 1 个数据中选择次小的1个数据,将其和第2个位置的数据交换。 (3)然后不断重复上述过程,直到最后两个数据完...

10 DAY'S 290

【数据结构】选择排序算法示例

基本选择排序编辑 排序算法即解决以下问题的算法: 输入 n个数的序列<a1,a2,a3,...,an>。 输出 原序列的一个重排<a1*,a2*,a3*,...,an*>;,使得a1*<=a2*<=a3*<=...<=an* 排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。插入排...

weixin_34184158的博客 130

php经典排序算法,PHP四种基本排序算法示例

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路。前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。$arr(1,43,54,62,21,66,3...

weixin_34794420的博客 138
下一篇: redis-笔记
 汪超
博客等级 码龄17年 65粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值