选择排序算法

离线强化学习(Offline RL)系列3: (算法篇) TD3+BC 算法详解与实现(经验篇) 本文作者提出的TD3+BC方法,结构简单,仅在值函数上添加一个行为克隆(BC)的正则项,并对state进行normalizing,简单的对TD3修改了几行代码就可以与前几种方法相媲美,结果表明:TD3+BC效果好,训练时间也比其他少很多 阅读详情

所谓的选择排序算法,就是在待排序的数组中不断的去查找最小值的过程;

首先,我们在待排序的数组中查找一个最小值,这个最小值要满足数组中的其他元素都要比它大,将查找到的这个最小值暂存到一个新的数组中;

然后,再查找剩余数组中最小的一个值,不断的重复查询最小值,指定数组中没有值可查为止,将以此查询到的最小值存入到新的数组中,我们就得到了一个有序的数组。

在开发中为了避免空间的浪费,我们不会new一个新数组,而是在原来的数组上实现上述步骤;

实例代码:

准备一个数组生成器:

public class ArrayGenerator {

    private ArrayGenerator(){}

    public static Integer[] generateOrderedArray(int n){
        Integer[] arr = new Integer[n];
        for(int i=0; i < n; i++) {
            arr[i] = i;
        }
            return arr;
    }
    // 生成一个长度为n的随机数组,每个数字的范围是[0,bound)
    public static Integer[] generateEandomArray(int n,int bound){
        Integer[] arr = new Integer[n];
        Random rnd = new Random();
        for(int i=0; i<n; i++){
            arr[i] = rnd.nextInt(bound);
        }
        return arr;
    }
}

排序辅助类

public class SortingHelper {

    private SortingHelper(){}
    //用以验证排序后的数组是否是有序数组
    public static <E extends Comparable> boolean isSorted(E[] arr){
        for(int i = 1;i<arr.length; i++){
            if(arr[i - 1].compareTo(arr[i])>0){
                return false;
            }
        }
        return true;
    }

    //验证算法的时效性
    public static <E extends Comparable> void sortTest(String sortName,E[] arr){
        Long startTime = System.nanoTime();
        if(sortName.equals("SelectionSort")){
            ChoiceTest.genericSort(arr);
        }
        Long endTime = System.nanoTime();
        double time = (endTime - startTime) / 1000000000.0;
        if(!SortingHelper.isSorted(arr)){
            throw new RuntimeException(sortName+" failed!");
        }
        System.out.println(String.format("%s , n = %d : %f s",sortName, arr.length,time));
    }
}

创建一个实体类:

public class Student implements Comparable<Student>{

    private String name;
    private int score;

    public Student(String name, int score){
        this.name = name;
        this.score = score;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(name, student.name);
    }

    @Override
    public int compareTo(Student another) {
        /*
        if(this.score == another.score)
            return -1;
        else if(this.score == another.score)
            return 0;
        return 1;
        */
        //推荐写法,效果与注释的相同
        return this.score - another.score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}

测试类:

/*
* 选择排序
* 选择排序算法是一个不断从数组中找到当中的最小值的过程,首先,在待排序的数组中找到一个最小值,
* 这个最小值要满足一下比数组中其他所有元素都要小,然后再找剩余元素的最小值的,不断的重复查找最小值直到最后一个,
* 这样我们就能得到一个排序好的值。
* */
public class ChoiceTest {

    private ChoiceTest(){}
    //arr[0...i)是有序的;arr{i...n)是无序的——循环不变量
    public static void main(String[] args) {
        /*
        int[] arr = {23,76,12,90,4,2,1};
        sort(arr);
        System.out.println(Arrays.toString(arr));
        */
        int n = 10000;
        //Integer[] arr = {23,76,12,90,4,2,1};
        Integer[] arr = ArrayGenerator.generateEandomArray(n,n);
        Long startTime = System.nanoTime();
        genericSort(arr);
        Long endTime = System.nanoTime();
        double time = (endTime - startTime) / 1000000000.0;

        if(!SortingHelper.isSorted(arr)){
            throw new RuntimeException("SortingHelper failed!");
        }

        System.out.println("Time:"+time);
        //System.out.println(Arrays.toString(arr));

        SortingHelper.sortTest("SelectionSort",arr);
        /*
        Student[] students = {new Student("Alice",98),
                new Student("Bobo",100),
                new Student("Charles",66)};
        ChoiceTest.genericSort(students);
        for(Student student:students){
            System.out.println(student.toString());
        }
        */
    }
    /**
     * 泛型排序方法
     * 让E这种类型实现Comparable接口的,针对泛型语法来说要使用extend来进行约束
     * 在泛型中它表示的不是继承,而是表示实现某一个接口。
     * 实现了这个接口代表的这个类是可比较的
     */
    public static <E extends Comparable<E>> void genericSort(E[] arr){
        for(int i = 0;i < arr.length; i++){
            // 选择 arr[i...n) 中的最小的索引
            int minIndex = i;
            for(int j = i; j < arr.length;j++){
                if(arr[j].compareTo(arr[minIndex]) < 0){
                    minIndex = j;
                }
            }
            genericSwap(arr,i,minIndex);
        }
    }
    //普通排序方法
    public static void sort(int[] arr){
        for(int i = 0;i < arr.length; i++){
            // 选择 arr[i...n) 中的最小的索引
            int minIndex = i;
            for(int j = i; j < arr.length;j++){
                if(arr[j] < arr[minIndex]){
                    minIndex = j;
                }
            }
            swap(arr,i,minIndex);
        }
    }
    //普通方法
    private static void swap(int[] arr, int i, int j){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    //泛型方法
    private static <E> void genericSwap(E[] arr, int i, int j){
        E tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

选着排序算法,有两层for循环,假设它的数据体量为n,算法的准确复杂度应该为:(1+n)*n/2,约掉不重要的常数,它的算法复杂度应该为:O(n^{2})。

基于Boost.Graph模块的BC聚类算法程序实现 BC(Betweenness Centrality)聚类算法是一种基于网络中节点的中介中心性度量来进行聚类的方法。在本文中,我们将使用Boost.Graph模块来实现BC聚类算法。BC聚类算法的主要思想是通过计算网络中节点之间的中介中心性来识别节点之间的连接模式。具体而言,算法计算节点对之间的最短路径数量,并将它们作为路径中介节点。通过识别具有高中介中心性的节点,我们可以将它们作为聚类的中心,从而将网络中的节点划分为不同的聚类。这是一个简单的BC聚类算法的实现示例,你可以根据自己的需求进行扩展和修改。 阅读详情

相关推荐

一种利用BC方法的关键词自动提取算法研究

一种利用BC方法的关键词自动提取算法研究 请下载查看。 看明白了,源码自己写就是了 只有算法。没有源码

c语言高级算法bc,老调重弹篇:有关BC/C++语言程序编程学习的:10大基础算法科普帖...

有关B|C语言算法是搭建网站程序和软件的灵魂,作为一名优秀的网站开发程序码农,只有对一些基础的算法有着全面的掌握,才会在日后搭建网站程序编写代码的过程中显得从容淡定。1、计算Fibonacci数列Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。2、B/C语言程序系统回文检查3、B/C语言程序系统质数检查1既不是质数也不是合数。4、B...

weixin_39714113的博客 528

种利用BC方法的关键词自动提取算法研究

种利用BC方法的关键词自动提取算法研究

Betweenness Centrality 算法介绍与参考资料等

Betweenness Centrality 算法介绍与参考资料等      Betweenness Centrality是网络中心性重要的度量参数之一(下面简称BC)。在计算BC参数中,经典算法为参考1(1)中的Brander算法,而开源软件图JUNG库计算BC的算法复杂度为O(n^2 + nm);而 计算无全图的算法复杂度为O(nm),计算有权图算法的复杂度为O(nm + n^2 log

wsh6759的CGIS专栏 8045

三极管自激升压电路设计 - 从参数计算到实践验证

本文详细解析了三极管自激升压电路(焦耳小偷电路)的设计原理与实践方法。通过剖析自激振荡机制与三极管电流关系,指导读者完成从核心参数计算、关键元件选型到面包板搭建调试的全过程。文章重点阐述了如何利用电感、三极管等基础元件实现低压直流到高压的转换,是理解开关电源与电磁能量转换的绝佳实践项目。

weixin_29250573的博客 366

机器学习系列(1)_逻辑回归初步

1、总述 逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。 2、由来     要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:     线性回归能对连续值结果进行预测,

寒小阳 13万+

行为克隆 (BC):被低估的“模仿大师”与它的天花板

本文深入探讨行为克隆(BC)在离线强化学习中的作用与局限性。BC通过监督学习直接模仿数据集动作,实现简单稳定,成为离线RL的重要下限基准。然而,其致命缺陷是协变量偏移导致的复合误差,使误差随步数平方级增长。尽管BC无法超越数据集质量,但在专家数据或窄分布任务中表现优异。文章对比了BC与离线RL的差异,并介绍了TD3+BC等过渡算法,通过平衡贪婪与保守策略实现性能提升。关键建议:离线RL任务应优先测试BC表现,作为算法效果的基线参考。

rmysjm的博客 1270

时序SDC约束set_data_check及常见应用场景

时序约束SDC之set_data_check命令及常见应用场景解析

weixin_37584728的博客 2286

图解选择排序算法及优化

3分钟学会选择排序算法及其优化

chenchenchencl的博客 7020

京东云鼎环境配置与API安全接入实战:ISV服务商如何搞定数据加密与商家授权

本文详细介绍了京东云鼎环境配置与API安全接入的实战指南,帮助ISV服务商解决数据加密与商家授权等核心问题。通过京东开放平台的应用申请流程,结合多租户数据隔离策略和自动化授权实现,确保电商生态中的安全高效运营。文章还提供了避坑指南,助力开发者规避常见配置错误。

weixin_28705087的博客 353

【算法】图解A* 搜索算法

A* 算法是启发式搜索算法,是根据Dijkstra算法改进而来。 问题引入 如下图所示,S为起始(start)节点,G为目标(goal)节点。 节点之间连线是两点的路径长度,如A到E的路径长度c(A,E) = 9。 节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15, 表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数,启发函数的设计有很多方法,具体可......

zhuhua造轮子的博客 4万+

【排序算法】——选择排序

排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。

2302_80243065的博客 3308

揭秘 Chat Template 如何驱动 AI Agent?以Qwen3为例详解LLM的聊天模板

bos_token: null (没有使用特殊的文档开始符)eos_token<|im_end|>(作为每个对话回合的结束符)pad_token: 对话回合开始<|im_end|>: 对话回合结束非特殊但关键的控制 Token (在词汇表中定义): 包裹模型生成的工具调用请求。: 包裹外部工具返回的执行结果。<think></think>: 包裹模型的内部思考或推理过程。

ljp1919的专栏 1352

Java 选择排序算法

简介 前一章我们说了 Java 冒泡排序算法 ,这章我们来学习一下选择排序,老规矩,我们带着问题去学习,这样能更快的熟悉和掌握,学习如下: 1、选择排序的定义 2、选择排序的思路 3、代码实现 1.选择排序的定义 选择排序算法:基本思路是为每一个位置选择当前最小的元素。 2、选择排序的思路 将第一个值看成最小值 然后和后续值进行比较,找出最小值和下标,交换本次遍历的起始值和最小值 直至完成第(n-1)个位置的元素选择 说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,

ZengTao 514

二、PCIE的TLP包的封包解包原理

熟悉 PCIE 的组建包的过程,以及内部的字段细节的定 义,掌握如何发送接收 Mrd(memory read TLP)、 Mwr(Memory write TLP)、Cpl (Completion TLP)和 Cpld(Completion with data TLP)命令包,深入理解 PCIE 底层协议工作过程

k7126685的博客 3929

【硬件的单元测试 UT 3】PCIe 3.0及信号完整性测试方法

PCIe标准自从推出以来,1代和2代标准已经在PC和Server上逐渐普及,用于满足高速显卡、高速存储设备对于高速数据传输的要求。出于支持更高总线数据吞吐率的目的,PCI-SIG组织在2010年制定了PCIe 3.0,即PCIe 3代的规范,数据速率达到8Gbps。

qq_43416206的博客 1412

如何选择合适的排序算法

常用的排序算法有很多,今天我们总结一下如何根据自己的业务场景选择合适的排序算法 一:概念介绍 空间复杂度:空间复杂度描述了一个算法运行需要占用的临时存储空间的大小,常用O(n)、O(1)表示 时间复杂度:时间复杂度描述了该算法的运行时间,常用O(n)、O(nlogn)表示 排序算法的稳定性:排序算法是否稳定取决于具有相同关键字记录的数据,在排序前后是否会改变原本的位置,如果不会交换位置,则成为稳定的排序算法 二:排序算法的特性总结 三:如何选择合适的排序算法 1:首先要确定对排序算法..

u012218309的博客 3080

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

图解多种排序算法的选择策略

排序算法是计算机科学中的基石,广泛应用于数据处理、搜索优化和日常业务逻辑中。冒泡排序以其简单性适用于教学和小数据集;选择排序则因其稳定性而受到青睐;插入排序效率高于几乎有序的数据。希尔排序通过优化插入排序提升性能,适用于中等规模数据集。归并排序以其稳定的时间复杂度和稳定性,成为合并操作的首选。快速排序以其分治策略和高效性成为处理大数据集的优选。堆排序则因其原地排序特性而广泛应用于资源受限环境。计数排序和基数排序专为特定数据范围设计,提供线性时间复杂度的解决方案。桶排序则适用于处理均匀分布的大数据集。这些算法

2501_90435375的博客 713

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

排序算法如何选择

排序算法的选择

好好学习 333

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

选择排序算法及优化

选择排序算法 选择排序算法的思路是:第一次将集合中最小的数挑选出来放在第一个位置,第二次将集合中最小的数挑选出来放在第二个位置,依此类推。 例如:我们需要对{2,9,5,7,8,0,1,3,4,6}进行排序 经过第1次循环最小位置是:5 结果是:[0, 9, 5, 7, 8, 2, 1, 3, 4, 6]; 经过第2次循环最小位置是:6 结果是:[0, 1, 5, 7, 8, 2, 9, 3, 4, 6]; 经过第3次循环最小位置是:5 结果是:[0, 1, 2, 7, 8, 5, 9, 3, 4,

Java_布丁 571

选择排序算法介绍

已排序的和未排序的,它们通过假想的一堵墙分隔开。在排序过程中,找出(选择)未排序子列表中的最小(或最大)元素,并把它和未排序列表中的第一个元素进行交换,再将假想的这堵墙(根据实际情况朝着对应方向)移动一个元素位置,这样每次排序后,已排序子列表中的元素将增加一个,同时未排序子列表中的元素将减少一个,每次把一个元素从未排序子列表移动到已排序子列表就完成了一轮排序。一个含有n个元素的数字列表需要(n - 1)轮排序来完成数据的重新排列。将假想墙放置在数字列表最左侧,墙的左侧为已排序子列表,右侧为未排序子列表。

liitdar的博客 6454

java的选择排序算法,java选择排序算法

/*** 选择排序:执行完一次内for循环后最小的一个数放在了数组的最前面。** 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。**/public class SelectSort {/*** 排序算法的实现,对数组中指定的元素进行排序** @param array* 待排序的数组* @param from...

weixin_30838971的博客 133

经典排序算法之简单选择排序

前面在介绍冒泡排序的时候,有提到一种简单排序算法,就是从0开始,每次确定一个位置的元素。假设当前需要确定的位置下标为 i,则将i处的元素与后面的元素逐个比较,并将每次比较结果中较小的元素存放在i处,从而保证i处一直保存着最小元素。 简单的选择排序算法与这种算法思路一样,但是选择排序在比较的过程中,并没有将比较结果存放在i处,而是保存每次比较结果中 较小元素的下标到min中,从而保证m

芳草源的博客 1万+
上一篇: 线性查找法
下一篇: 插入排序算法
咕咚走了
博客等级 码龄9年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值