[转载] java实现四种常用排序算法

别只当玩具!聊聊这个555金属探测器电路背后的电磁感应与RLC调谐原理 本文深入解析了555金属探测器电路的工作原理,重点探讨了电磁感应与RLC调谐原理。通过分析电感线圈的电磁特性、RLC谐振电路的行为以及555定时器的多重功能,揭示了这一看似简单的装置如何实现金属检测。文章还提供了灵敏度优化方案和常见问题解决方法,帮助读者从科学角度理解这一实用技术。 阅读详情

参考链接: 用Java排序

四种常用排序算法 

##注:从小到大排 

##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。 

public void bubbleSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++)

            for (int j = 0; j < array.length - 1 - i; j++)

                if (array[j] > array[j + 1]) {

                    t = array[j];

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

                    array[j + 1] = t;

                }

    }

 

 

##选择排序## 特点:效率低,容易实现。 思想:每一趟从待排序序列选择一个最小的元素放到已排好序序列的末尾,剩下的为待排序序列,重复上述步骤直到完成排序。 

public void selectSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++){

            int index=i;

            for (int j = i + 1; j < array.length; j++)

                if (array[index] > array[j])

                    index=j;

            if(index!=i){ //找到了比array[i]小的则与array[i]交换位置

                t = array[i];

                array[i] = array[index];

                array[index] = t;

            }

        }

    }

 

 

##插入排序## 特点:效率低,容易实现。 思想:将数组分为两部分,将后部分元素逐一与前部分元素比较,如果前部分元素比array[i]小,就将前部分元素往后移动。当没有比array[i]小的元素,即是合理位置,在此位置插入array[i] 

public void insertionSort(int array[]) {

        int i, j, t = 0;

        for (i = 1; i < array.length; i++) {

            if(a[i]<a[i-1]){

                t = array[i];

                for (j = i - 1; j >= 0 && t < array[j]; j--)

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

                //插入array[i]

                array[j + 1] = t;

            }

        }

}

 

快速排序 

特点:高效,时间复杂度为nlogn。 采用分治法的思想:首先设置一个轴值pivot,然后以这个轴值为划分基准将待排序序列分成比pivot大和比pivot小的两部分,接下来对划分完的子序列进行快排直到子序列为一个元素为止。 

public void quickSort(int array[], int low, int high) {// 传入low=0,high=array.length-1;

        int pivot, p_pos, i, t;// pivot->位索引;p_pos->轴值。

        if (low < high) {

            p_pos = low;

            pivot = array[p_pos];

            for (i = low + 1; i <= high; i++)

                if (array[i] > pivot) {

                    p_pos++;

                    t = array[p_pos];

                    array[p_pos] = array[i];

                    array[i] = t;

                }

            t = array[low];

            array[low] = array[p_pos];

            array[p_pos] = t;

            // 分而治之

            quickSort(array, low, p_pos - 1);// 排序左半部分

            quickSort(array, p_pos + 1, high);// 排序右半部分

        }

 

 

测试demo: 

import java.util.Arrays;

public class sortTest {

    // 冒泡排序

    public void bubbleSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++)

            for (int j = 0; j < array.length - 1 - i; j++)

                if (array[j] > array[j + 1]) {

                    t = array[j];

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

                    array[j + 1] = t;

                }

    }

 

    // 选择排序

    public void selectSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++){

            int index=i;

            for (int j = i + 1; j < array.length; j++)

                if (array[index] > array[j])

                    index=j;

            if(index!=i){ //找到了比array[i]小的则与array[i]交换位置

                t = array[i];

                array[i] = array[index];

                array[index] = t;

            }

        }

    }

 

public void insertionSort(int array[]) {

        int i, j, t = 0;

        for (i = 1; i < array.length; i++) {

            if(a[i]<a[i-1]){

                t = array[i];

                for (j = i - 1; j >= 0 && t < array[j]; j--)

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

                //插入array[i]

                array[j + 1] = t;

            }

        }

}

 

    // 分治法快速排序

    public void quickSort(int array[], int low, int high) {// 传入low=0,high=array.length-1;

        int pivot, p_pos, i, t;// pivot->位索引;p_pos->轴值。

        if (low < high) {

            p_pos = low;

            pivot = array[p_pos];

            for (i = low + 1; i <= high; i++)

                if (array[i] > pivot) {

                    p_pos++;

                    t = array[p_pos];

                    array[p_pos] = array[i];

                    array[i] = t;

                }

            t = array[low];

            array[low] = array[p_pos];

            array[p_pos] = t;

            // 分而治之

            quickSort(array, low, p_pos - 1);// 排序左半部分

            quickSort(array, p_pos + 1, high);// 排序右半部分

        }

    }

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int[] array = { 37, 47, 23, 100, 19, 56, 56, 99, 9 };

        sortTest st = new sortTest();

        // st.bubbleSort(array);

        // st.selectSort(array);

        // st.insertionSort(array);

        st.quickSort(array, 0, array.length - 1);

        System.out.println("排序后:" + Arrays.toString(array));

    }

}

AI使能的SVD算子:基于深度学习的矩阵分解方法 奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于信号处理、数据降维、推荐系统等领域。传统SVD算法虽然精确,但在处理大规模矩阵时面临计算复杂度高、内存需求大等问题。本文提出了一种基于深度学习神经网络的SVD算子实现方法,完全摒弃传统数值算法,仅使用PyTorch框架构建的神经网络模型来完成大规模信道矩阵的SVD分解与还原。 阅读详情

相关推荐

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

java实现四种常用排序算法

四种常用排序算法 注:从小到大排 冒泡排序 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。 public void bubbleSort(int array[]) { int t = 0; for (int i = 0; i &lt; a...

sifanvv的博客 256

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 674

Java常见4种排序

排序 看到数据排序这节所以把排序的常见方法都整理下。 (一)冒泡排序:从最左边开始对两个数进行比较,如果第i个数大于第i+1个数,两个数就交换,不断重复。 最好时间复杂度O(n) 最坏时间复杂度O(n²) 平均时间复杂度O(n²) public class ArrayDemo06{ public static void main (String [] args){ int

bigdatar的博客 3582

java常用的几种排序算法

以下列出java常用的几种排序算法,只是简单实现了排序的功能,还有待改进,望指教(以下均假设数组的长度为n): 1)冒泡排序: 依次比较相邻的两个元素,通过一次比较把未排序序列中最大(或最小)的元素放置在未排序序列的末尾。   public class BubbleSort { public static void sort(int data[]) { for (int i = 0

ygc87的专栏 3万+

Java提供的排序算法是怎么实现的?快排?

前几天整理的一套面试题,其中有一个问题就是Java的JDK中我们见到的Collections.sort()和Arrays.sort()这两个排序算法实现方式是什么,很多小伙伴心里边默认的应该是快排,但是不全对或者理解的不够深刻,以下我们从源码的层次一点点解释一下这个问题:一、Arrays.sort()的排序算法先来看看Arrays.sort(),sort方法拥有很多的重载,有十几种,以int查看

Java后端技术 1664

JAVA四种常用排序算法

JAVA四种常用排序算法

m0_59176231的博客 230

Java常用的八种排序算法与代码实现

Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力。那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法

xiaoxijinger的博客 5186

JAVA常用排序算法详解

   本来想 自己总结一下Java常用排序算法,查了下发现有篇博客写的挺完整的,这里转载一下,相关的博客内容正确性和代码正确性,我这边会有所检查和修改,转载地址见最下方。     相较于原博客,我会对代码进行复审,并且加上相关注解,便于理解 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在“桶排序”算法中对每个...

zxysshgood的博客 925

Java实现八大排序算法转载

SortAlgorithms 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结,强行学习。首先罗列一下常见的十大排序算法: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 其中我们讨论...

6f5902ac237024bdd0c176cb93063dc4 的博客 1万+

Java八大排序算法实现_java实现折半排序算法

我的Java开发学习之旅------>Java经典排序算法之二分插入排序一、折半插入排序(二分插入排序)将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法。在处理A[i]时,A[0]……A[i-1]已经按关键码值排好序。所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的...文章欧阳鹏2015-06...

weixin_36331336的博客 758

常见排序算法原理及java实现

最近整理了几种常见排序算法,基于java代码实现,都只是点干货,没有过多原理分析,后期会持续更新 /** * * 冒泡排序 @author :manzi Create Date : 2019年4月29日 下午6:55:20 * * 原理:比较两个相邻的元素,将值大的元素交换至右端。 * * 1思路:依次比较相邻的两个数,将小数放在前面,大数放在后...

weixin_34080951的博客 209

【数据结构】之排序算法综合篇

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.csdn.net/smile_running 数据结构课程的内容基本忘光了,所以又拾起数据结构与算法的书本,重新学习了一边排序算法的原理和实现,在经过几个晚上的努力,终于把这几种排序算法给搞明白了,下...

你若盛开,蜜蜂自来 7637

java 排序算法总结_Java排序算法总结(转载

排序算法平均时间复杂度冒泡排序O(n2)选择排序O(n2)插入排序O(n2)希尔排序O(n1.5)快速排序O(N*logN)归并排序O(N*logN)堆排序O(N*logN)基数排序O(d(n+r))一. 冒泡排序(BubbleSort)基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。过程:比较相邻的两个数据,如果第二个数小,就交换位置。从后向前两两比较,一直到比较最前两个数据。最终最小数...

weixin_32824369的博客 313

java 8大排序算法实现

Java 常用排序算法/程序员必须掌握的 8大排序算法  本文由网络资料整理转载而来,如有问题,欢迎指正!  分类:  1)插入排序(直接插入排序、希尔排序)  2)交换排序(冒泡排序、快速排序)  3)选择排序(直接选择排序、堆排序)  4)归并排序  5)分配排序(基数排序)  所需辅助空间最多:归并排序  所需辅助空间最少:堆排序  平均速度最快:快速排序  不稳定:快...

AntKengElephant的博客 532

Java如何实现八个常用排序算法

转载:http://www.jb51.net/article/70396.htm 这篇文章主要介绍了Java如何实现八个常用排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,分享给大家一起学习。 分类 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序)

Ajian_Dianye的博客 382

四种排序算法Java 实现

dddd

ZHANGYONGHAO604的博客 362

JAVA四种排序算法 以及复杂度分析

第一种:冒泡排序  public static int[] bubbleSort(int[] a) { for (int i = 0; i < a.length; i++) { for (int j = 0; j < (a.length - i) - 1; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j

蓝缘 1567

常见几种java排序算法

1.插入排序 public class InsertSort { public static void sort(int[] arr) { if (arr.length &amp;amp;amp;gt;= 2) { for (int i = 1; i &amp;amp;amp;lt; arr.length; i++) { //挖出一个要用来插入的值,同时位置上留下...

zzzgd_666的博客 10万+

JAVA随时笔记(四):常用排序算法实现

1、冒泡排序 原理: 比较array[n]和array[n+1]的大小,把大的数交换到后面,即array[n]&amp;gt;array[n+1],就交换。循环到数组最后,就可以把最大值找出来,放到array[length-1]上。 第二次循环,把第二大的数交换到array[length-2]上面 循环n-1次就把最大的n-1个数找出来,最小的数就在array[0]处。 为了方便,这里把交换的函...

鱼机的编程之路 254

各种排序算法的分析及java实现

  排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。   排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。   内排序...

daxiang3255的博客 710

Java 八种排序算法比较实践

写这篇文章是因为面试时经常会问这个问题,但是工作中也没用到过,所以一直是一知半解。但是我是属于比较较真的人,这次下定决心要把它们搞明白。知识在于积累,多点知识对自己总是有好处的。 我比较好奇的是,这几种方法到底哪个最快?我以前只知道冒泡排序,但这种方式可能是最慢的了。在网上搜了搜找到了这么一张图,看似蛮有道理的,如下: 从这个图可以看出貌似堆排序和归并排序最快因为无论好坏情...

高磊的专栏 8262

数字设计和计算机体系结构第二版(Digital Design and Computer Architecture, 2nd Edition) 奇数题答案

数字设计和计算机体系结构第二版课后答案,网上有些资源是错误的。

Altium designer 元件库大全(终结版).zip_74封装元件库_AD SCH元件库_oncewcl_常用AD封装库

AD超全封装库 里面包含有所有市面上常用的封装库

上一篇: [转载] scala
下一篇: [转载] Java复制对象与集合工具类
ld909
博客等级 码龄14年 10粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值