选择排序 思想 JAVA实现
已知一个数组 9、29、95、47、79、37、18、56、96、22 使用选择排序是数组有序
选择排序同样是一个运行时间为O(N²)的排序算法。
算法思想:(以从小到大为例)
9、29、95、47、79、37、18、56、96、22 数组元素
0、1、 2、 3、 4、 5、 6、 7、 8、 9 数组下标
选择排序是选择一个位置进行排序,将有序元素排放在数组最左边。
第一轮排序
选择数组的第一个位置上的元素开始与其他元素进行逐个比较,即index[0]与index[1]、index[2]、index[3]、index[4]、index[5]、index[6]、index[7]、index[8]、index[9]比较,
将最小的元素放在index[0]所在的位置上。(期间进项相互比较和复制)。
第二轮排序
选择数组的第二个位置上的元素开始与其他元素进行逐个比较,即index[1]与index[2]、index[3]、index[4]、index[5]、index[6]、index[7]、index[8]、index[9]比较,
将最小的一个元素放在index[1]所在的位置上。
第三轮排序
。。。。
直到整个数组有序。
以下是通过java实现
private int[] Array;
private int currentIndex;
private int maxIndex;
public SelectOrder(int size) {
this.Array = new int[size];
this.currentIndex = 0;
this.maxIndex = size-1;
}
public void insert(int value) {
if(this.maxIndex<this.currentIndex) {
System.out.println("数组已满");
}else {
this.Array[this.currentIndex++] = value;
}
}
/**
* 选择排序的思想是“选择一个位置”进行排序,将有序元素放在数组最左边
*/
public void order() {
for(int i=0;i<this.Array.length-1;i++) {//外层循环控制位置
for(int j=i+1;j<this.Array.length;j++) {//里层循环进行循环比较
onChange(i,j);
}
}
}
public void onChange(int out,int in) {
if(this.Array[out]>this.Array[in]) {
int temp = this.Array[in];
this.Array[in] = this.Array[out];
this.Array[out] = temp;
}
}
public void show() {
for (int i : Array) {
System.out.println(i);
}
}
最终排序结果为: 9、18、22、29、37、47、56、79、95、96
选择排序 思想 JAVA实现的更多相关文章
- 选择排序之Java实现
选择排序之Java实现 一.方法一 package cn.com.zfc.lesson21.sort; /** * * @title SelectSort * @describe 选择排序 * @au ...
- 经典排序算法之-----选择排序(Java实现)
其他的经典排序算法链接地址:https://blog.csdn.net/weixin_43304253/article/details/121209905 选择排序思想: 思路: 1.从整个数据中挑选 ...
- Java基础(46):选择排序的Java封装(完整可运行)
1 package lsg.ap.select; import java.util.Random; public class SelectSort { //选择排序 /** *@author: 梁山广 ...
- 选择排序算法Java与Python实现
Java 实现 package common; public class SimpleArithmetic { /** * 选择排序 * 输入整形数组:a[n] [4.5.3.7] * 1. 取数组编 ...
- 选择排序法-java详解案例
/** * 功能:选择排序法 * 思想:第一次从R[0]-R[N-1]中选取最小值,与R[0]交换,第二次从R[1]-R[N-1]中选取最小值,与R[1]交换, * 第三次从R[2]-R[N-1]中 ...
- 【排序算法】直接选择排序算法 Java实现
基本思想 直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 初始状态:无序区为a[1...n],有序区为空. 第一次排序:在无序区a[1...n]中选出最小的记录a[k],将它与有序区的第 ...
- 常见排序算法总结:插入排序,希尔排序,冒泡排序,快速排序,简单选择排序以及java实现
今天来总结一下常用的内部排序算法.内部排序算法们需要掌握的知识点大概有:算法的原理,算法的编码实现,算法的时空复杂度的计算和记忆,何时出现最差时间复杂度,以及是否稳定,何时不稳定. 首先来总结下常用内 ...
- 选择排序(JAVA实现)
算法思想:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录 ...
- 排序算法系列:选择排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)
在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 从数组头元素索引i开始,寻找后面最小的值(比i位 ...
随机推荐
- MySQL中SQL_CALC_FOUND_ROWS的用法
1. SQL_CALC_FOUND_ROWS简述 在很多分页的程序中都这样写: #查出符合条件的记录总数 SELECT COUNT(*) from [table] WHERE ......; #查询当 ...
- 前端工作准备-foxmail登陆失败汇总
foxmail 管理邮箱账号的一个工具软件, 但是在登陆的时候总是遇到明明账号密码没有问题,却总是报错,这里我登陆的时候的集中解决方法总结下: pop和imap 是邮箱的两种协议,大多选imap协议, ...
- angularJS笔记之 服务
angular的服务有五种 第一种 constant 一般作为一种常量的服务 不可更改 第二种 value 用来注册服务对象或函数 可更改 第三种 factory 创建和配置服务的最快捷方式.可更改 ...
- LCD 调试总结
转自:http://blog.csdn.net/qikaibinglan/article/details/5630246 (1) 液晶显示模式 并行:MCU接口.RGB接口.Vysnc接口 串行:SP ...
- CSV Format
[CSV Format] The comma separated values format (CSV) has been used for exchanging and converting dat ...
- Linux 常用命令(转)
转自:https://www.cnblogs.com/gaojun/p/3359355.html 1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文 ...
- 【原创】8. MYSQL++中的Row类型
一.mysqlpp::Row类型 在之前的介绍中我们看到了如何通过mysqlpp::Query找到各种Result类型,然后又仔细分析了各种Result类型又是如何生成对应的Row类型(如下所示). ...
- 【bzoj1019】[SHOI2008]汉诺塔
1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1427 Solved: 872[Submit][Status] ...
- ARCGIS空间叠加分析(转)
ARCGIS空间叠加分析 https://blog.csdn.net/gswwldp/article/details/66974465 (2)双击④处的Identity,打开Identity操作对话框 ...
- 17-取石子-hdu1846(巴什博奕)
http://acm.hdu.edu.cn/showproblem.php?pid=1846 Brave Game Time Limit: 1000/1000 MS (Java/Others) ...