数组排序(2)-选择排序

(一)选择排序

  1.算法描述:

   (1) 初始状态:有序区为空,无序区为R[1..n];

   (2) 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;

   (3) n-1趟结束,数组有序化了。

  

  2.手动模拟排序:

   

  

  3.算法分析:

    (1)时间复杂度:平均情况 O(n2)  最好情况 O(n^2)  最坏情况 O(n^2)

    (2)空间复杂度: O(1)

    (3)稳定性:不稳定

(二)代码体现:

public class SelectionSort {    public static void main(String[] args) {        int[] arr = {3,4,1,2,7,8,6,5};        Selection(arr);//排序        System.out.println("-----------------------------------------");        print(arr);//打印结果    }

    private static void Selection(int[] arr) {        if(arr == null || arr.length <= 1){            return;        }        for (int i = 0; i < arr.length - 1; i++) {            int minIndex = i;            for (int j = i; j < arr.length; j++) {                if(arr[j] < arr[minIndex]){                    minIndex = j;                }            }            //交换            if(minIndex != i){                int temp = arr[minIndex];                arr[minIndex] = arr[i];                arr[i] = temp;            }            //打印每一趟排序结果            print(arr);        }    }

    public static void print(int[] arr){        StringBuilder sb = new StringBuilder("[");        for (int i = 0; i < arr.length; i++) {            sb.append(arr[i]);            if(i != arr.length - 1){                sb.append(", ");            }        }        System.out.println(sb.append("]"));    }}

原文地址:https://www.cnblogs.com/bug-baba/p/10547046.html

时间: 2024-10-12 17:56:08

数组排序(2)-选择排序的相关文章

实例365(13)---------经典数组排序方法------选择排序法

一:使用选择排序法对一维数组进行排序,截图 /*选择排序的个人理解:第一遍筛选,选出其中最大的值,得到值和下标 将最大的值的位置和数组的第一个位置交换 从数组的第二个位置开始第二遍筛选 将其中最大的值的位置和数组的第二个位置交换 直到筛选完数组 */ 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u

数组排序之选择排序

??在刚开始学习数组时,不能很好的使用简单的排序算法,当进行深入学习了一段时间后,才分清楚,今天这里简单的分享一下使用选择排序的算法并进行相关实例. 1. 什么是选择排序? ??从字面意思可以理解,就是有选择的进行排序,那么什么是有选择的呢?按照我的理解,就是按照某一种规则(例如从大到小或者从小到大)进行排序,就好像我们去看美女,肯定是先找气质最好的,依次往下,当然按照气质来进行选择的话,这是一个判断条件,是我们的一个标准:而我们所学习的选择排序也是这样. 专业解释: ??选择排序是通过每一趟排

单行数组排序【选择排序】

sense:也许只有那些时刻准备着的人,才有资格过得好吧 虽然选择排序和冒泡排序都是在一次内循环后确定了一个元素的位置,不同的是冒泡会移动一些中间位置[这些元素移动的位置并不是它最终位置] 选择排序,使用了标记这个概念[我的理解是:给将可能成为极端位置的元素标记(极端是指有序序列逻辑上的端位置)] 具体代码: 1 public class ChooseSort { 2 public static void main(String []args){ 3 int array[] = {3,2,41,

实例365(13)---------经典数组排序方法------选择排序法,冒泡排序法

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

java12-6 冒泡排序法和选择排序法

1.冒泡排序法 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 分析: 第一次比较排序的结果:会把其中最大的数据排到最大的索引处 第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方, 所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处 第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个, 第四次:少3个.. 综上所述,要使数组里面的数据按照从小到大排序,总的比

冒泡排序和选择排序

冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序. 选择排序的平均时间复杂度比冒泡排序的稍低:同样数据的情况下,2种算法的循环次数是一样的,但选择排序只有0到1次交换,而冒泡排序只有0到n次交换.   1.冒泡法:这是最原始,也是众所周

Java数组排序算法之直接选择排序

1.基本思想 直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换. 与冒泡排序相比,直接选择排序的交换次数要少很多,因此速度更快些. 2.算法示例 每一趟从待排序的数组元素中选出最小(或最大)的一个元素,顺序的放在已排好序的数组元素前或后,直到全部待排序的数据元素排完. 例如有一个6个元素的数组[63 4 24 1 3 15],排序大致过程如下所述: 第1轮排序:63和15交换位

数组排序代码,冒泡排序&amp;快速排序&amp;选择排序

冒泡排序: for(var i=0;i<arr.length-1;i++){ for(var j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } 选择排序: var arr=[2,5,4,6,3,7,1]; for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length

常用排序法之一 ——冒泡排序法和选择排序法

语言中,常用的算法有:冒泡排序.快速排序.插入排序.选择排序.希尔排序.堆排序以及归并排序等等.那么从这篇开始,我将分别总结下这几种排序法. 先交代一下,我们将要排序的数组定义为arr[N],即数组arr[]包含N个元素. ## 冒泡排序法(Bubblesort) ## 所谓排序法,就是对一组无序的序列进行有序的排序(从大到小或者从小到大),那么什么叫冒泡排序法,冒泡排序法又是怎么实现数组的有序排列呢. 冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`a