选择排序原理及Java实现
更新时间:2023-08-17 09:01:02 阅读量: 资格考试认证 文档下载
选择排序原理及Java实现
选择排序(Selection Sort )分为两种 简单选择排序(Simple Selection Sort) 和树形选择排序。
简单选择排序(Simple Selection Sort):
简单选择排序类似于冒泡排序(Bubble Sort) ,每次都会在剩下的元素集合中选择出一个最值出来填充到当前位置。唯一的区别是,冒泡排序在每次发现比当前值小于(或大于)时,都会交换元素的位置, 而 简单选择排序是选择剩余元素中的最值和当前位置交换数据。
比如对于元素集合R={37, 40, 38, 42, 461, 5, 7, 9, 12} 在第一趟排序中:37直接和5交换, 形成新的序列
R1={5,40,38,42,461,37,7,9,12}
在第二趟排序中:40直接和7交换, 形成新的序列
R2={5,7,38,42,461,37,40,9,12}
以此类推,直到最后一个元素(注意:在第二趟排序中,38比42小,但是他们并没有交换数据)。
以下是简单选择排序的一个Java实现版本:
public static void selectionSort(int[] data) {
if (data == null || data.length <= 1)
return;
int i, j, value, minPos, len = data.length;
int outer = len - 1, tmp;
for (i = 0; i < outer; i++) {
value = data[i];
minPos = -1;
for (j = i + 1; j < len; j++) {
if (data[j] < value) {
minPos = j;
value = data[j];
}
}
if (minPos != -1) {
tmp = data[i];
data[i] = value;
data[minPos] = tmp;
}
// for (int k = 0; k < len; k++) {
// System.out.print(data[k] + " , "
// }
// System.out.println();
}
}
public static void main(String[] args) {
int[] coll = {
37, 40, 38, 42, 461, 5, 7, 9, 12
};
selectionSort(coll);
for (int i = 0; i < coll.length; i++) {
System.out.print(coll[i] + " , "); );
}
}
树选择排序(Tree Selection Sort)
树选择排序算法相对于简单选择排序来说是典型的以空间换时间的算法。其思想是对待排序的 N 个元素 , 构造出相对较小的 (n+1)/2个数,然后再构造出相对较小的[n+1]/4个数,直到只有一个元素为止。构造成一个完全二叉树。 排序的时候,那个元素就是最小的,取出该最小元素,将该元素替换为"最大值",再调整完全二叉树。
下面是树形选择排序的一个Java实现版:
public static void treeSelectionSort(int[] data) {
if (data == null || data.length <= 1)
return;
int len = data.length , low = 0 , i , j;
// add Auxiliary Space
int[] tmp = new int[2*len -1];
int tSize = tmp.length;
//construct a tree
for(i =len-1 , j=tmp.length-1;i >=0 ;i--,j--){
tmp[j]=data[i];
}
for(i = tSize -1 ; i > 0 ; i-=2){
tmp[(i-1)/2] = tmp[i] > tmp[i-1]? tmp[i-1]:tmp[i];
}
//end
//remove the minimum node.
while(low < len){
data[low++] = tmp[0];
for(j=tSize-1;tmp[j]!=tmp[0];j--);
tmp[j] = Integer.MAX_VALUE;
while(j > 0){
if(j%2 == 0){ //如果是右节点
tmp[(j-1)/2] = tmp[j] > tmp[j-1]?tmp[j-1]:tmp[j];
j = (j-1)/2;
}else{ //如果是左节点
tmp[j/2]=tmp[j] > tmp[j+1]? tmp[j+1]:tmp[j];
j = j/2;
}
}
}
}
在构造完全二叉树的时候对 N 个元素的集合, 需要 2*N -1 个辅助空间。 代码:
while(j > 0){
if(j%2 == 0){ //如果是右节点
tmp[(j-1)/2] = tmp[j] > tmp[j-1]?tmp[j-1]:tmp[j];
j = (j-1)/2;
}else{ //如果是左节点
tmp[j/2]=tmp[j] > tmp[j+1]? tmp[j+1]:tmp[j]; j = j/2;
}
}
则实现递归的构造新集合中的最小值。
PS;本文档由北大青鸟广安门收集自互联网,仅作分享之用。
正在阅读:
选择排序原理及Java实现08-17
斜面低温保藏法12-31
六校联考英语试题04-20
快乐的淘气堡之行作文200字07-07
小学一年级体育教学案例 (喜羊羊大战灰太狼—持轻物投准)03-08
中国传统文化剪纸02-17
年产200万盒中药功能红参及其它长白山道地药材饮片生产基地建设项目可行性报告1 - 图文01-21
大工17春《企业税收筹划》大作业标准答案05-13
护理工作计划20XX12-11
- 梳理《史记》素材,为作文添彩
- 2012呼和浩特驾照模拟考试B2车型试题
- 关于全面推进施工现场标准化管理实施的通知(红头文件)
- 江西省房屋建筑和市政基础设施工程施工招标文件范本
- 律师与公证制度第2阶段练习题
- 2019-2020年最新人教版PEP初三英语九年级上册精编单元练习unit6训练测试卷内含听力文件及听力原文
- 小升初数学模拟试卷(十四) 北京版 Word版,含答案
- 认识创新思维特点 探讨创新教育方法-精选教育文档
- 00266 自考 社会心理学一(复习题大全)
- 多媒体在语文教学中的运用效果
- 派出所派出所教导员述职报告
- 低压电工作业考试B
- 18秋福建师范大学《管理心理学》在线作业一4
- 中国铝业公司职工违规违纪处分暂行规定
- 13建筑力学复习题(答案)
- 2008年新密市师德征文获奖名单 - 图文
- 保安员培训考试题库(附答案)
- 银川市贺兰一中一模试卷
- 2011—2017年新课标全国卷2文科数学试题分类汇编 - 1.集合
- 湖北省襄阳市第五中学届高三生物五月模拟考试试题一
- 排序
- 原理
- 实现
- 选择
- Java
- 电工证考试操作项目一 绝缘电阻及吸收比的测量
- 分物游戏教学设计
- 日本对中国美术教育的影响
- 试写出用力法计算图示结构的典型方程
- 品管部岗位职责及任职要求
- 功率因数个补偿容量计算
- 第十三届中国(漯河)食品博览会参展会务手册
- 挽回爱情的技巧之怎样挽回女友
- 精准扶贫过程中返贫阻断的长效机制研究——以福建省建瓯市为例
- 王镜岩生物化学 第22章戊糖磷酸途径
- c语言 第4讲选择结构程序设计
- MTT法观察细胞生长曲线
- 语文高级教师职称申报述职报告
- 人类与环境之间的关系探讨
- 论奥斯卡王尔德《道林格雷的画像》中的死亡结局与唯美主义
- 春江花月夜之感想
- 第11章计算机系统的维护及优化
- 黄湾中心小学课堂教学常规问卷调查反馈
- wouldrather的用法
- 摄像头组 北京科技大学 摄像头组一队