Java基础(46):选择排序的Java封装(完整可运行)
1 package lsg.ap.select; import java.util.Random; public class SelectSort { //选择排序 /** *@author: 梁山广 * 2016年4月11日上午10:04:13 * @param a:需要尽行排序的数组 */ //选择排序 /* * 选择排序和冒泡排序差不多,只是冒泡排序在发现比它小的时候就交换,而选择排序是只 * 有在确定了最小的数据之后,才会发生交换。选择排序的基本思想:第i趟简单选择排序 * 是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个 * 记录进行交换。先临时记录其位置,只有在一趟循环完以后确定了最小的数据,才会发生交换。 * 问题:为什么最小值记录要用下标而不能直接用数组元素? * 答:会导致数据覆盖后丢失 */ public static void selectSort(int [] a) { int n = a.length; for(int i=0; i<n-1; i++) { int min = i; for(int j=i+1; j<n; j++) { if(a[j] < a[min]) { min = j; } } if(i != min)//当当前位置已经为本轮最小元素时,直接不用交换即可 { int temp = a[i]; a[i] = a[min]; a[min] = temp; } } } public static void selectSort2(int [] a) { int n = a.length; for(int i=0; i<n-1; i++) { int min = a[i]; for(int j=i+1; j<n; j++) { if(a[j] < min) { min = a[j]; } } if(a[i]!= min)//这个本质是为了把最小的元素交换到最前面, //但是实际上当a[i]!=min时会导致a[i]数据的丢失 //,出现了重复的元素,因此只能用下标来指示min //但是插入排序的话,两种方法都可以 { int temp = a[i]; a[i] = min; a[min] = temp; } } } /** * * 输出相应数组的结果 * @param array */ private static void printArray(int[] array) { for(int value:array) { System.out.print(" "+value+" "); } System.out.println(); } public static void main(String[] args) { //小数据量的测试 int[] array=new int[]{8,3,2,1,7,4,6,5}; //下面是大数据量的测试。这样才能看出不同算法的优劣 Random random=new Random(); int[] array2=new int[2000]; for(int j=0;j<2000;j++) { array2[j]=random.nextInt(100000); } System.out.println("排序前数组元素为:"); printArray(array); long dateStart=System.nanoTime(); selectSort(array); long dateEnd= System.nanoTime(); long totalTime=dateEnd-dateStart; System.out.println("选择排序的时间复杂度为:"); System.out.println(totalTime+"纳秒"); System.out.println("排序后数组元素为:"); printArray(array); } }
Java基础(46):选择排序的Java封装(完整可运行)的更多相关文章
- 【java基础】选择排序and冒泡排序
前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...
- 【Java基础】选择排序、冒泡法排序、二分法查找
1.选择排序: //改进后的选择排序,减少交换的次数 public static void sortSelect(int arr[]) { //用于存放最小数的下标 int s; for (int i ...
- Java基础-数组常见排序方式
Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...
- 选择排序之Java实现
选择排序之Java实现 一.方法一 package cn.com.zfc.lesson21.sort; /** * * @title SelectSort * @describe 选择排序 * @au ...
- Java数组直接选择排序、sort()排序
/** * 1.数组sort()排序 * 2.直接选择排序(两重for循环排序) */ import java.lang.*; import java.lang.reflect.Array; impo ...
- 选择排序-Python & Java
选择排序:1.找出最小的数值放在第一位2.找出剩余数据中最小的数值放在第二位,以此类推,直到最后一个数值 算法的时间复杂度为:O(n) ''' 选择排序: 1.找出最小的数值放在第一位 2.找出剩余数 ...
- 经典排序算法之-----选择排序(Java实现)
其他的经典排序算法链接地址:https://blog.csdn.net/weixin_43304253/article/details/121209905 选择排序思想: 思路: 1.从整个数据中挑选 ...
- Java基础:三步学会Java Socket编程
Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛 第一步 ...
- 【Java SE】如何用Java实现直接选择排序
摘要:直接选择排序属于选择排序的一种,但是它的排序算法比冒泡排序的速度要快一些,由于它的算法比较简单,所以也比较适合初学者学习掌握. 适宜人群:有一定Java SE基础,明白Java的数据类型,数组的 ...
随机推荐
- 小米2/2S 手机由 Smartisan OS ROM 刷回 MIUI 教程
刷机所需文件1.请前往 MIUI 官网下载小米 2/2S 标准版 MIUI ROM 包.下载地址:http://www.miui.com/getrom.php?r=2:下载后请将原文件名修改为“upd ...
- oracle communities
应该常来这看看 https://www.oracle.com/communities/index.html
- C# Unicode编码与解码方法
public static class ExtentMethod { public static string ToUnicodeString(this string str) { StringBui ...
- TM2013修改帐号数据目录
M 2013安装以后,聊天记录文件夹默认的保存位置是在“我的文档”中“Tencent Files”,而QQ就可以在软件系统设置中进行指定,但TM2013没有这一栏设置,那么如何才能修改聊天记录文件夹保 ...
- c语言作业
- POJ 1236 Network of Schools (Tarjan + 缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12240 Accepted: 48 ...
- C++ 编译器内存错误 after Normal block。。。
解决 after Normal block(#908) at 0x399EC0. CRT detected that the application wrote to memory after end ...
- Windows-002-U盘启动盘制作
通常我们安装系统时,均采用光盘的形式安装,只是这种方法需要随时随地的带着光盘,还不容易保存.携带光盘.这时,一个 U盘启动盘 就是您的首选了,此种方式的好处多多,比如:忘记开机密码.系统备份.安装系统 ...
- $.ajax所犯的错误。success后面不执行
$.ajax({ type: 'post', url: '../AshxHandler/HandlerAddPhoto.ashx', data: { clientPath: photoName }, ...
- 深入浅出 React Native:使用 JavaScript 构建原生应用
深入浅出 React Native:使用 JavaScript 构建原生应用 链接:https://zhuanlan.zhihu.com/p/19996445 原文:Introducing React ...