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

2,SelectionSortArray.java 实现了选择排序的迭代形式和递归形式。具体代码如下:

public class SelectionSortArray {
/*
* Task:将数组中前n个对象按升序排列
* @param a Comparable 对象的数组
* @param n 大于0的整数,表示数组的长度
*/
public static <T extends Comparable<? super T>> void selectionSort(T[] a, int n){
for(int index = 0; index < n-1; index++){
int indexOfNextSmallest = getIndexOfSmallest(a, index, n-1);
swap(a, index, indexOfNextSmallest);
}
} //返回索引first 至 索引last 之间的最小值的索引
private static <T extends Comparable<? super T>> int getIndexOfSmallest(T[] a, int first, int last){
T min = a[first];
int indexOfMin = first;
for(int index = first + 1; index <= last; index++){
if(a[index].compareTo(min) < 0){
min = a[index];
indexOfMin = index;
}//end if
}
return indexOfMin;
} //交换数组元素不涉及compareTo方法,因而使用Object作为元素类型
private static void swap(Object[] a, int i, int j){
Object temp = a[i];//交换的并不是引用,而是具体的元素的值
a[i] = a[j];
a[j] = temp;
} //选择排序的递归方法
public static <T extends Comparable<? super T>> void selectionSort_Recursive(T[] a, int n){
selectionSort(a, 0, n - 1);
} private static <T extends Comparable<? super T>> void selectionSort(T[] a, int first, int last){
if(first < last)
{
int indexOfNextSmallest = getIndexOfSmallest(a, first, last);
swap(a, first, indexOfNextSmallest);
selectionSort(a, first + 1, last);
}
}
}

选择排序算法的JAVA实现的更多相关文章

  1. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  2. 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】

    一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法 ...

  3. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

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

    选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累. 简述 选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间.其实选择排序原理很简单,就是在未排序序列 ...

  5. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  6. 几大排序算法的Java实现

    很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...

  7. 7种基本排序算法的Java实现

    7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...

  8. 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现

    选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...

  9. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...

随机推荐

  1. [转帖]Gartner预测2019年全球IT支出将达到3.8万亿美元

    Gartner预测2019年全球IT支出将达到3.8万亿美元 http://server.zhiding.cn/server/2019/0130/3115439.shtml 全球领先的信息技术研究和顾 ...

  2. Java和Android的Lru缓存,及其实现原理

    一.概述 Android提供了LRUCache类,可以方便的使用它来实现LRU算法的缓存.Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHas ...

  3. Jquery 组 checkbox全选checkbox

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  4. 装CentOS 系统

    一. 二. 三. 四. 五. 六. 七. 八. 九. 十. 十一. 十二. 十三. 十四. 十五. 十六. 十七. 十八. setup设置

  5. ImportError: cannot import name descriptor_pb2

    重新编译protobuf 下载地址:https://github.com/google/protobuf $cd /path/protobuf/python $python setup.py buil ...

  6. 关于mysql性能压测之tpcc

    软件下载: wget http://imysql.com/wp-content/uploads/2014/09/tpcc-mysql-src.tgz安装依赖:yum install -y mysql- ...

  7. BZOJ4377[POI2015]Kurs szybkiego czytania——数学思维题

    题目描述 给定n,a,b,p,其中n,a互质.定义一个长度为n的01串c[0..n-1],其中c[i]==0当且仅当(ai+b) mod n < p.给定一个长为m的小01串,求出小串在大串中出 ...

  8. BZOJ4650 NOI2016优秀的拆分(后缀数组)

    显然只要求出以每个位置开始的AA串数量就可以了,将其和反串同位置的结果乘一下,加起来就是答案.考虑对每种长度的字符串计数.若当前考虑的A串长度为x,我们每隔x个字符设一个关键点,求出相邻两关键点的后缀 ...

  9. js的==和===练习

    今天检查了一下JS的== 和===的区别 如下: 表达式                              值 1==true  true 1===true  false 0==false t ...

  10. 【GYM 102059】2018-2019 XIX Open Cup, Grand Prix of Korea

    vp了一场gym,我又开心地划水了. A. Coloring Roads 题意:给定一棵树,树边一开始都是无色的,每次操作可以把一个点到根的路径染成某个颜色,每次询问当前树上出现过某个次数的颜色种数. ...