基于Java实现的选择排序算法

选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累。

简述

选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间。其实选择排序原理很简单,就是在未排序序列中找到最小(大)的元素然后放到数组前面,然后再从剩下的未排序序列中找到最小(大)的元素放在上一次找到最小(大)元素的后面,以此类推完成排序。

动图演示

看下动图上的演示,就能够找出排序规律,非常之简明易懂。

(算法动图来源于参考资料,详细请往下翻阅)

代码实现

 1 /**
 2  * 选择排序
 3  * @param array 待排序数组
 4  * @return 已排序数组
 5  */
 6 public static int[] selectionSort(int[] array) {
 7     int len = array.length;
 8     // 如果数组长度为0或者1,都是不用排序直接返回
 9     if(len == 0 || len == 1) {
10         return array;
11     }
12     for(int i = 0; i < len - 1; i++) {
13         int minIdx = i;
14         for(int j = i + 1; j < len; j++) {
15             // 找到最小的数
16             if(array[minIdx] > array[j]) {
17                 // 保存最小数的索引
18                 minIdx = j;
19             }
20         }
21         // 如果一轮比较下来都没有变更最小值的索引则无需调换顺序
22         if(minIdx != i) {
23             int tmp = array[i];
24             array[i] = array[minIdx];
25             array[minIdx] = tmp;
26         }
27     }
28     return array;
29 }

算法分析

最佳情况:T(n) = O(n2)  最差情况:T(n) = O(n2)  平均情况:T(n) = O(n2)

由此看出,选择算法的排序情况是很稳定的,不管输入什么样的数据都是一样的时间复杂度。

参考资料

1、https://www.cnblogs.com/guoyaohua/p/8600214.html

原文地址:https://www.cnblogs.com/captainad/p/10946033.html

时间: 2024-08-02 02:49:13

基于Java实现的选择排序算法的相关文章

简单排序之选择排序算法JAVA实现

选择排序原理 选择排序是一种简单排序算法.这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素.当然,一开始的时候,我们认为都是未经排序的. 选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置.主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置.以一个元素个数为N的整形数组arr为例: 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较a

选择排序算法的JAVA实现

1,采用选择排序对元素进行排列时,元素之间需要进行比较,因此需要实现Comparable<T>接口.即,<T extends Comparable<T>>. 更进一步,如果允许待比较的类型可以和它的父类型进行比较,则需要写成:<T extends Comparable<? super T>, 其中<? super T> 表示 T 的任意超类. 2,SelectionSortArray.java 实现了选择排序的迭代形式和递归形式.具体代码如

Java学习资料-Java常用算法-选择排序算法

ChooseSort源程序public class ChooseSort { private static void ChooseSort (int [] a){  for(int i = 0; i < a.length; i++){   //对数组循环,假设数据排在前面的元素总比后面的小,然后与后面的数据进行比较   int k = i;   for(int j = i+1; j <a.length; j++){//对数据遍历,寻找最小的数据元素的数组下标    if(a[j]<a[k

[java初探06]__排序算法的简单认识

今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. 最后按照常规思路,我将逐次从排序算法的了解,常用的几种排序算法的原理及实现,几种算法的对比以及适用场景.三个方面展开对排序算法的学习. 排序算法的基本了解 在我们学习一样知识,技术之前,首先我们应当对它有一个基本的了解,然后在了解的基础上逐渐深入学习. 在计算机科学与数学中,排序算法(Sorting

java实现的集中排序算法

嗯,在经典的排序算法里面,有:冒泡排序,选择排序,插入排序,希尔排序,二叉归并排序,快速排序,堆排序 下面给出java的实现方式,不过快速排序没有搞定,研究中 package net.itaem.sort; /** * 数组排序 * */ public class ArraySorted { /** * 冒泡排序(而且是简单的冒泡排序,应该属于交换排序,不属于经典的冒泡排序) * */ public static void bubble(int[] source){ if(source.leng

选择排序算法(排序详解)

直接插入排序(Selection Sort)算法 1.基本思想: 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面). n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空.

选择排序算法---直接选择排序和堆排序

本文主要是解析选择排序算法:直接选择排序和堆排序. 一.直接选择排序   基本思想:       选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终

【排序】选择排序算法

特别说明 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 选择排序思想 选择排序又称为简单选择排序,主要思想描述如下: 01.假设待排序列表为 .选择排序将  划分为由已排序好序的  部分 以及 未排序的  部分: 注意:刚开始时  部分其实可认为只有一个元素,即: 元素 02.每次从  部分中选出最小(或最大)的那个元素,将其放在  的末尾位置: 03.重复02步骤,直到  部分为空为止: 编码参考 简单选择排序是非常简单的一种排序

选择排序算法实现

//选择排序法 //time :2017.3.8 //author :justing_zhang /****************************************************************************************/ #include <stdio.h> void println(int array[], int len){    int i = 0;        for(i=0; i<len; i++)    {