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的数据类型,数组的 ...
随机推荐
- jboss4.2.3 SSL配置 + 生成数字签名
一.生成数字签名 1. 生成JKS文件 keytool -genkey -keyalg RSA -alias jbosskey -keystore jbosskey.jks 在win7系统中,该文件的 ...
- [troubleshoot][archlinux][X] plasma(KDE) 窗口滚动刷新冻结(约延迟10s)(已解决,root cause不明,无法再次复现)
现象: konsole,setting等plasma的系统应用反应缓慢,在滚动条滚动时,尤为明显. 触发条件: 并不是十分明确的系统滚动升级(Syu)后,产生. 现象收集: 可疑的dmesg [ :: ...
- C# 操作Cookie类
1.Cookie操作类 using System; using System.Data; using System.Configuration;using System.Web;using Syste ...
- CDH(Cloudera)与hadoop(apache)对比
本文出自:CDH(Cloudera)与hadoop(apache)对比http://www.aboutyun.com/thread-9225-1-1.html(出处: about云开发) 问题导读 ...
- 使用JetBrains dotMemory 4.0分析内存
安装下载地址:http://www.jetbrains.com/profiler/ 1.在本地启动web应用后,打开dotMemory,附加进程 2.附加后会看到集中颜色得粗条,不断往左边走动,这是内 ...
- ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and click 'Restart'
ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and click ...
- [LeetCode]题解(python):083 - Remove Duplicates from Sorted List
题目来源 https://leetcode.com/problems/remove-duplicates-from-sorted-list/ Given a sorted linked list, d ...
- magento多语言中文语言包
语言包key:http://connect20.magentocommerce.com/community/Mage_Locale_zh_CN
- iOS 冒泡排序
//冒泡排序 -(NSArray*)Bubble_Sort:(NSArray*)oldArray { NSMutableArray * newArray = [NSMutableArray array ...
- iOS UIApplicationDelegate
1.- (void)applicationWillResignActive:(UIApplication *)application说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或 ...