[Java]排序算法>选择排序>【简单选择排序】(O(n*n)/不稳定/)
1 选择排序
1.1 算法思想
每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后(or最前面),直到全部排完位置。
1.2 算法特征
- 属于【选择排序】
- 简单选择排序
- 堆排序
- 适用于【稳定性】:不稳定(亦可稳定,与“交换记录”的策略相关)
- 适用于【存储结构】:顺序存储结构 or 链式存储结构 (二者均可)
- 【时间复杂度】:O(n*n) (最好/平均/最坏)
- 【空间复杂度】:O(1) (最好/平均/最坏)
- (补充:)移动次数较少
- 相关口诀:(选)希堆快不稳定,选(基)归堆时衡定
1.3 算法实现
import java.util.Arrays;
public class SelectSort {
/**
* 选择排序
* @param array
* @return
*/
public static int [] selectSort(int[] array){
int left = 0, right = array.length-1;
int [] resultArray = Arrays.copyOfRange(array, 0, array.length);
for(int i=left;i<right;i++){
int minIdx = i;
for(int j=i+1;j<=right;j++){//每趟选择出最小值元素的下标
if(resultArray[minIdx]>resultArray[j]){//存在更小的元素时
minIdx = j;
}
}
int tmp = resultArray[minIdx];
resultArray[minIdx] = resultArray[i];
resultArray[i] = tmp;
}
return resultArray;
}
}
1.4 算法测试
import java.util.Scanner;
public class Main {
public static void print(int[] array){
if(array==null || array.length<1){
return;
}
for(int i=0;i<array.length-1;i++){
System.out.print(array[i]+" ");
}
System.out.println(array[array.length-1]);
}
public static void main(String[] args) {
//1 输入 一组 乱序的数值 数组
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String [] strValues = input.trim().split(" ");
int [] array = new int[strValues.length];
for(int i=0,len=strValues.length;i<len;i++){
array[i] = Integer.valueOf(strValues[i]).intValue();//假定所有输入均为合规的整型数值
}
// print(array);// test - 输出 所输入的数据
//2 排序
int [] sortedArray = SelectSort.selectSort(array);
//3 输出
print(sortedArray);
}
}
1.5 参考文献
- 《数据结构(C语言-第2版-严蔚敏 吴伟民 著)》:Page246
[Java]排序算法>选择排序>【简单选择排序】(O(n*n)/不稳定/)的更多相关文章
- Java排序算法(二):简单选择排序
[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用 ...
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...
- Java排序算法(四)希尔排序2
Java排序算法(四)希尔排序2 希尔排序移步法:分组+直接插入排序组合 一.测试类SortTest import java.util.Arrays; public class SortTest { ...
- Python实现八大排序算法(转载)+ 桶排序(原创)
插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...
- 排序算法(5)--Selection Sorting--选择排序[2]--Heap Sort--堆排序
1.基本思想 具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n ...
- 排序算法<No.7>【希尔排序】
排序算法进入到第7篇,这个也还是比较基础的一种,希尔排序,该排序算法,是依据该算法的发明人donald shell的名字命名的.1959年,shell基于传统的直接插入排序算法,对其性能做了下提升,其 ...
- 常见排序算法总结:插入排序,希尔排序,冒泡排序,快速排序,简单选择排序以及java实现
今天来总结一下常用的内部排序算法.内部排序算法们需要掌握的知识点大概有:算法的原理,算法的编码实现,算法的时空复杂度的计算和记忆,何时出现最差时间复杂度,以及是否稳定,何时不稳定. 首先来总结下常用内 ...
- 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序
工作.工作.找工作.经过1个多星期的思想斗争还是决定了找JAVA方面的工作,因为好像能比PHP的工资高点.呵呵 :-) (其实我这是笑脸,什么QQ输入法,模拟表情都没有,忒不人性化了.) 言归正传, ...
- Java排序算法之冒泡、选择、插入、快速
JavaSort Java经典排序算法代码 2018-1-26更新:冒泡排序,选择排序,插入排序,快速排序 1. 冒泡排序 特点:效率低,实现简单 思想(从小到大排): 第1个数和第2个数比较,如果第 ...
- 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现
排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...
随机推荐
- testNG框架之我见
testNG框架中会有一个xml文件夹,里面放xml文件,之后必须要在pom文件中配置 xml文件中有一个suite,在suite中可以配置parameter参数.test用例,还可以添加listen ...
- 构建 Maven 项目卡爆?优化后:1 秒完成…
在实际开发中,我们通常会用到maven的archetype插件(原型框架)来生成项目框架. 但是无奈,创建时,总会卡在: [INFO] Generating project in Batch mode ...
- nacos启停脚本
nacosServer.sh #!/bin/bash #auther by wangxp PWD=`pwd` #配置java环境变量 JAVA_HOME=/u01/java_home/jdk1.8.0 ...
- Python Boolean类型 判断
and 判断非Boolean类型数据会自动转换类型 "A" and "B" → "B" 因为表达式 A 和 B都为True所以返回 &quo ...
- PHP判断0和空的方法
可以兼容,传参数,或者不参数与0的判断 if ( isset($data['other_id']) && (!empty($data['other_id']) || is_nume ...
- idea初学
IDEA 什么是IDE IDEA官网 idea中文设置:打开右上角设置选择设置,选择Plugins ,搜索Chinese,安装插件后重启即可 IDEA基础语法 注释 编写代码量多时,项目结构复杂,需要 ...
- python使用zipfile压缩文件,包括空目录
zipfile压缩文件.包括空目录 # !/usr/bin/python import os import zipfile def zipdir(dirPath=None, zipFilePath=N ...
- CanvasScaler的三种适配模式——缩放模式(Scale with Screen Size)
一.含义 根据屏幕尺寸进行缩放,随着屏幕尺寸进行放大缩小 二.参数介绍 第一个参数一般是美术人员根据游戏主要面向的手机市场,比如安卓市场,用市场上最常用的分辨率作为制作UI图片的标准.这里填的数就是美 ...
- 图像主题颜色提取(Median cut)
前言 之前想对图片素材进行分类管理,除了打标签,还有一样是通过主题色进行分类.于是开始寻找能提取主主题色的工具,最后找到了大名鼎鼎的 Leptonica 库,其中就有中位切割算法的实现.下面附上中位切 ...
- Linux shell usage()使用说明
usage()类似于执行文件-help展示的内容,即告诉使用者有哪些参数选项可供使用. usage()格式 点击查看代码 #!/bin/bash usage() { echo "Usage: ...