排序算法图解之Java选择排序

目录
  • 1.选择排序简介
  • 2.图解选择排序算法
  • 3.选择排序代码实现

1.选择排序简介

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

2.图解选择排序算法

选择排序的基本思想如下:

第一次:从arr[0]~arr[n-1]中选取最小值,与arr[0]进行交换;

第二次:从arr[1]~arr[n-1]中选取最小值,与arr[1]进行交换;

第三次:从arr[2]~arr[n-1]中选取最小值,与arr[2]进行交换;

第 i 次:从arr[i]~arr[i-1]中选取最小值,与arr[i]进行交换;

总共通过n-1次,可以得到从小到大的有序序列。

以序列:{8, 3, 2, 1, 7, 4, 6, 5} 为例!分步骤图解如下:

思路说明:

1.在每趟排序时,都假定当前位置的元素为最小值,如果在遍历过程中发现有比当前位置元素还小的值,则替换最小值。(先将最小值记录,此趟遍历完成再替换)

2.选择排序一共有数组大小-1趟排序。

3.选择排序代码实现

import java.util.Arrays;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 选择排序
 */
public class SelectSort {

    public static void main(String[] args) {
        int[] array = {8, 3, 2, 1, 7, 4, 6, 5};
        System.out.println("排序前: " + Arrays.toString(array));
        selectSort(array);
        System.out.println("排序后: " + Arrays.toString(array));
    }

    //选择排序
    public static void selectSort(int[] arr){
        //选择排序过程
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i; //假定最小索引,最小值为第一个元素
            int min = arr[minIndex];
            for (int j = i + 1; j < arr.length; j++) {
                if (min > arr[j]){
                    //更新最小值
                    min = arr[j];
                    minIndex = j;
                }
            }
            //将最小值放进arr[i]
            if (i != minIndex){
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
            //输出每轮排序后的结果
            System.out.println("第" + (i+1) + "趟: " + Arrays.toString(arr));
        }
    }
}

运行结果如下:

到此这篇关于排序算法图解之Java选择排序的文章就介绍到这了,更多相关Java选择排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 排序算法图解之Java希尔排序

    目录 1.希尔排序简介 2.希尔排序算法图解 3.希尔排序代码实现 1.希尔排序简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序,即将简单的插入排序进行改进后的一个更加高效的版本,也称缩小增量排序. 希尔排序是非稳定排序算法.把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止. 2.希尔排序算法图解 以序列: {8, 9, 1, 7,

  • 排序算法图解之Java冒泡排序及优化

    目录 1.冒泡排序简介 2.图解算法 3.冒泡排序代码实现 4.冒泡排序算法的优化 1.冒泡排序简介 冒泡排序(Bubble Sorting)即:通过对待排序的序列从前往后,依次比较相邻元素的值,若发现逆序则交换位置,使较大的元素逐渐移动到后部,就像水底的气泡一样逐渐从水面冒出来,这就是冒泡名称的由来 2.图解算法 以将序列{3, 9, -1, 10, -20}从小到大排序为例! 基本思想就是,在每一趟排序实现将最大的数移到序列的最后端!这主要通过比较相邻两个元素实现,当相邻的两个元素逆序的时候

  • 排序算法图解之Java插入排序

    目录 1.插入排序简介 2.插入排序思想及图解 3.插入排序代码实现 1.插入排序简介 插入排序,一般也被称为直接插入排序.对于少量元素的排序,它是一个有效的算法.插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的.记录数增1的有序表.在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 2.插入排序思想及图解 插入排序的基本思想如下: 把n个待排序的元素看成为一个有序表和一个无

  • Java数据结构之常见排序算法(上)

    目录 认识排序 常见排序的分类 直接插入排序 希尔排序(缩小增量排序) 选择排序 堆排序 认识排序 在学校中,如果我们要参加运动会,或者军训的时候,会按照身高从矮到高进行站队,比如上课老师手上拿的考勤表,通常是按照学号从低到高进行排序的.再比如编程语言排行榜,也是在排序. 生活中有相当多的排序场景,由此可知,排序还是很重要的, 本章就会介绍常见的一些排序算法. 所谓排序呢,就拿我们上面的举例来说,会按照某个或某些关键字的大小,递增或者递减排列起来的操作,这就是排序,这里面也涉及到排序的稳定性,举

  • 排序算法图解之Java快速排序的分步刨析

    目录 1.快速排序简介 2.思路简介及图解 3.实现代码及运行结果 1.快速排序简介 快速排序是对冒泡排序的一种改进.基本思想为:通过一趟排序将要排序的数据分割为独立的两个部分,其中一部分的所有数据比另外一部分的所有数据要小,然后按照此方法对这两部分分别进行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列. 2.思路简介及图解 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分. (2)将大于或等于分界值的数据集中到

  • Java实现常见的排序算法的示例代码

    目录 一.优化后的冒泡排序 二.选择排序 三.插入排序 四.希尔排序 五.快速排序 六.随机化快速排序 七.归并排序 八.可处理负数的基数排序 一.优化后的冒泡排序 package com.yzh.sort; /* 冒泡排序 */ @SuppressWarnings({"all"}) public class BubbleSort { public static void BubbleSort(int[]a){ for (int i = 0; i <a.length-1 ; i+

  • 排序算法图解之Java选择排序

    目录 1.选择排序简介 2.图解选择排序算法 3.选择排序代码实现 1.选择排序简介 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾.以此类推,直到全部待排序的数据元素的个数为零.选择排序是不稳定的排序方法. 2.图解选择排序算法 选择排序的基本思想如下: 第一次:从arr[0]~arr[n-1]中选取最小值,

  • JS排序算法之冒泡排序,选择排序与插入排序实例分析

    本文实例讲述了JS排序算法之冒泡排序,选择排序与插入排序.分享给大家供大家参考,具体如下: 冒泡排序: 对数组的中的数据,依次比较相邻两数的大小. 如果前面的数据大于后面的数据,就交换这两个数. 时间复杂度O(n^2) function bubble(array){ var temp; for(var i=0; i<arr.length; i++){ for(var j=0; j<arr.length; j++){ if(arr[j]>arr[j+1]){ temp = arr[j+1]

  • PHP排序算法系列之直接选择排序详解

    直接选择排序 直接选择排序(Straight Select Sorting) 的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,-.,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,-..,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列· 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不

  • Java 选择排序、插入排序、希尔算法实例详解

    1.基本思想: 在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法实现 /** * 选择排序算法 * 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾. * 以此类推,直到所有元素均排序完毕. * @param numbers */ public static void selectSort(int[] nu

  • Java十大经典排序算法图解

    目录 0.算法概述 0.1 算法分类 0.2 算法复杂度 0.3 相关概念 1.冒泡排序(Bubble Sort) 1.1 算法描述 1.2 动图演示 1.3 代码实现 2.选择排序(Selection Sort) 2.1 算法描述 2.2 动图演示 2.3 代码实现 2.4 算法分析 3.插入排序(Insertion Sort) 3.1 算法描述 3.2 动图演示 3.3代码实现 3.4 算法分析 4.希尔排序(Shell Sort) 4.1 算法描述 4.2 动图演示 4.3 代码实现 4.

  • 七大经典排序算法图解

    目录 插入排序 ①直接插入排序 基本思想 动图演示 代码实现 ②希尔排序 基本思想 图示 代码实现 选择排序 ③直接选择排序 基本思想 动图演示 代码实现 ④堆排序 基本思想 建堆需要注意的问题 图示 代码实现 交换排序 ⑤冒泡排序 基本思想 动图演示 代码实现 ⑥快速排序 基本思想 基本框架 Partion函数分析 Partion函数的优化 快速排序代码实现 归并排序 ⑦归并排序 基本思想 动图演示 代码实现 排序算法复杂度及稳定性分析 插入排序 ①直接插入排序 基本思想 每次从一个有序序列开

随机推荐