java方式实现选择排序
一、基本思想
每一趟找到未排序序列的最小(大)值,把它存放在已排序序列末尾,直到把所有的数据排序完,即是第k趟找到剩余未排序数据的最小(大)值,然后把这个最小(大)值存放在数组的第k(k=1,2...n)位置(对应数组元素下标为k-1),直到把所有的数据排序完,一共需要进行n-1趟(n表示数组的长度),每一趟进行n-k次比较,找到该趟的最小值,比较总次数位n (n- 1) / 2次,所以时间复杂度位O(n2)。空间复杂度为O(1)。
二、实现步骤
- 首先在未排序序列中找到最小(大)元素,存放在排序序列的起始位置。
- 再从剩余未排序元素中寻找最小(大)元素,然后存放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
三、图解
四、代码展示
public class JavaSort {
public static void main(String[] args) {
int a [] =new int []{1,5,4,10,6,29,5,20};
System.out.println("排序前的数组:"+Arrays.toString(a));
selectSort(a);
System.out.println("排序后的数组:"+Arrays.toString(a));
}
/**
* 选择排序简单原理:总共进行n-1趟(n表示数组长度),第k趟找出该趟最小的数据,存放在数组下标为k-1位置
* @param ary 要排序的数组
* @return 返回排序好的数组
*/
public static int [] selectSort(int [] ary) {
for (int i = 0; i < ary.length-1; i++) {//进行n-1趟
int min=i;//每趟最小值所在位置
for (int d = i+1; d < ary.length; d++) {//第k趟进行n-k次比较k=i-1)
if(ary[min]>ary[d]) {
min=d;//找到每一趟最小值所在的位置
}
}
int temp=ary[i];//将i下标(i下标对应i+1趟)所对应的元素与每趟最小值交换
ary[i]=ary[min];
ary[min]=temp;
}
return ary;
}
}
运行截图:
java方式实现选择排序的更多相关文章
- 【java基础】选择排序and冒泡排序
前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...
- 【Java SE】如何用Java实现直接选择排序
摘要:直接选择排序属于选择排序的一种,但是它的排序算法比冒泡排序的速度要快一些,由于它的算法比较简单,所以也比较适合初学者学习掌握. 适宜人群:有一定Java SE基础,明白Java的数据类型,数组的 ...
- Java冒泡排序与选择排序
Java排序: 一.冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. ...
- 常用算法Java实现之选择排序
选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序. 具体流程如下: 1.首先从原数组中选择最小的1个数据,将其置于第一个位置. 2.然后从剩下的数据中再选择其中最小的一个数据,并将 ...
- Java数组直接选择排序、sort()排序
/** * 1.数组sort()排序 * 2.直接选择排序(两重for循环排序) */ import java.lang.*; import java.lang.reflect.Array; impo ...
- Java数组之选择排序
选择排序 package com.kangkang.array; import java.util.Arrays; public class demo04 { public static void m ...
- 关于Java中的选择排序法和冒泡排序法
一,这种方法是直接传入一个数组进行排序(选择排序法) public static void selectSort(int arr[]){ for (int i = 0; i < arr.leng ...
- 【Java基础】选择排序、冒泡法排序、二分法查找
1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...
- java中的选择排序之降序排列
import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...
随机推荐
- Scrapy爬虫框架基本使用
scrapyhub上有些视频简单介绍scrapy如何学习的(貌似要FQ):https://helpdesk.scrapinghub.com/support/solutions/articles/220 ...
- Java并发编程实战 03互斥锁 解决原子性问题
文章系列 Java并发编程实战 01并发编程的Bug源头 Java并发编程实战 02Java如何解决可见性和有序性问题 摘要 在上一篇文章02Java如何解决可见性和有序性问题当中,我们解决了可见性和 ...
- E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)
E. XOR Guessing 交互题. 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位. 因为异或的性质,如果一个数和0异或,那么就等于本身. 所以我们第一次异或 ...
- SpringData Redis的简单使用
SpringDate Redis是在Jedis框架的基础之上对Redis进行了高度封装,通过简单的属性配置就可以通过调用方法完成对Redis数据库的操作,而且SpringData Redis使用了连接 ...
- matlab基础知识总结
- webpack-常用配置知识点
webpack配置多页面 webpcak配置多页面需要在entry中配置多个,在plugins中配置多个htmlWebpackPlugin,具体如下 entry:{ "index" ...
- 微软原文翻译:适用于.Net Core的WPF数据绑定概述
原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...
- python语法学习第六天--字典
字典:可变容器类型,用键值对的形式采用花括号储存(键唯一) 语法:d={key1:value1,key2:value2} 访问字典中的值: 字典名[键名]#若字典中不存在则报错 更改字典: 添加值:字 ...
- HDU 2012 (水)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2012 题目大意:给你段连续数字,判断每个数字带入函数 n^2+n+41 是否都为素数,是输入OK,否则 ...
- spark机器学习从0到1支持向量机SVM(五)
分类 分类旨在将项目分为不同类别. 最常见的分类类型是二元分类,其中有两类,通常分别为正数和负数. 如果有两个以上的类别,则称为多类分类. spark.mllib支持两种线性分类方法:线性支持 ...