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的数据类型,数组的 ...
随机推荐
- nginx 反向代理 取得真实IP和域名
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...
- Hadoop学习笔记(一)
HDFS适合一次写入,多次读取NameNode将文件系统的元数据存储在内存中,因此HDFS所能存储的文件总数受限于NameNode容量类:IOUtil Progressable URL.setURLS ...
- css spprite应用
(一)实现简单的淘宝带图标侧边栏效果 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- iOS NSURLSession 封装下载类
周六日鼓捣NSURLSession,效率虽然低下,最后还是有了一点点眉目.昨天和汤老师一起测试,又对它加深了一点理解.趁热打铁,先总结一下. 封装的类,对外用的方法,我写的是类方法,所以,在类方法中, ...
- 用CocoaPods做iOS程序的依赖管理
CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...
- iOS 的 XMPPFramework 简介
XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开 ...
- toggle笔记
<!DOCTYPE html> <!-- saved from url=(0040)http://v3.bootcss.com/examples/carousel/ --> & ...
- 1.Oracle数据库概述
Oracle数据库概述 1.1Oracle结构图 1.1如何访问数据库 a.本机直接通过sock(套接字)方式访问 IPC UDP协议 ,不需要网络 b.通过tcp建立连接到oracle服务器 1. ...
- 团队冲刺the second day
今天是我们的团队冲刺的第二天,由于我的电脑出现了一点问题,系统还原了,我有重新配置了一下环境变量和一些eclipse的问题,导致时间浪费了很多,但是我还是做了一些简单的任务,例如编写节日的页面的布局, ...
- SQL截取字符串函数
A.截取从字符串左边开始N个字符 以下是代码片段: Declare @S1 varchar(100) Select @S1='http://www.xrss.cn' Select Left( ...