选择排序算法的JAVA实现
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实现的更多相关文章
- JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法 ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- 基于Java实现的选择排序算法
选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累. 简述 选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间.其实选择排序原理很简单,就是在未排序序列 ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- 几大排序算法的Java实现
很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...
- 7种基本排序算法的Java实现
7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
- 几种简单的排序算法(JAVA)
几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...
随机推荐
- Docker(十三)-Docker save and load镜像保存
持久化docker的镜像或容器的方法 Docker的镜像和容器可以有两种方式来导出 docker save #ID or #Name docker export #ID or #Name docker ...
- zlib 简单封装
下列代码用于压缩和解压字符串,使用标准库string.实现了对zlib的简单封装. #pragma once #include <boost/noncopyable.hpp> #inclu ...
- WebService相关
1.WebService 之 WSDL文件 讲解 2.WSDL样式详解 3.IntelliJ IDEA 开发 WebService 4.浅谈WebService的调用 5.用IDEA8快速开发WebS ...
- HMM模型学习笔记(前向算法实例)
HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...
- sql 表,字段(列),表数据(行)相关命令
随便转载,保留出处:http://www.cnblogs.com/aaron-agu/ 注: 以下所有操作都在登陆数据库后执行 命令use test; test为数据库名 查看表 show tabl ...
- 如何判断使用的是Lodop还是C-Lodop
Lodop和C-Lodop混合部署的时候,LodopFuncs.js里面有自动判断当前浏览器使用什么,支持np插件的就会使用Lodop,不支持插件方式的会使用C-Lodop,可以通过预览窗口左上角图标 ...
- webapi返回泛型给easyui
由于之前遇到的easyui调用webapi的问题. 参见 :http://blog.csdn.net/hanjun0612/article/details/51144991 所以就考虑,封装一个泛型用 ...
- 浅析python日志重复输出问题
浅析python日志重复输出问题 问题起源: 在学习了python的函数式编程后,又接触到了logging这样一个强大的日志模块.为了减少重复代码,应该不少同学和我一样便迫不及待的写了一个自己的日 ...
- MT【37】二次函数与整系数有关的题
解析: 评:两根式是不错的考虑方向,一方面二次函数两根式之前有相应的经验,另一方面这里$\sqrt{\frac{b^2}{4}-c}$正好和两个根有关系.
- linux运维、架构之路-linux文件属性
1.查看文件属性 ls -lhi 文件属性详细说明 1. 第一列: inode索引节点编号 2. 第二列:文件类型及权限 3. 第三列:硬链接数 4. 第四列:文件或目录所属的用户,即文件的所有者 5 ...