简单选择排序实现

简单选择排序就是通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i (1 ≤ i ≤ n)个记录交换。

代码实现:

public class SelectSort {

	//置换
public void swap(int[] elem, int i, int j) {
int temp = elem[i];
elem[i] = elem[j];
elem[j] = temp;
} //简单选择排序
public void selectSort(int[] elem) {
int min;
for (int i = 1; i < elem.length; i++) {
min = i;
for (int j = i+1; j < elem.length; j++) {
if(elem[min] > elem[j]) {
min = j;
}
} if(min != i) {
swap(elem, i, min);
}
}
} public static void main(String[] args) {
SelectSort s = new SelectSort();
int[] elem = {0, 9, 1, 5, 8, 3, 7, 4, 6, 2};
s.selectSort(elem);
for (int i = 0; i < elem.length; i++) {
System.out.print(elem[i] + ", ");
}
}
}

当i=时,elem[i]=9,min开始是1,然后与j=2到9比较elem[min]与elem[j]的大小。因为j=2最小,所以min=2,注意这里比较了8次,却只交换数据操作一次

简单选择排序复杂度分析

简单选择排序的特点是交换移动数据次数相对较少,这样节约了相应的时间,分析复杂度发现无论好坏情况,其比较次数是一样多的,第i趟排序需要进行n-i次关键字比较,此时需要比较n(n−1)2\frac{n(n-1)}{2}2n(n−1)​次。而对于交换次数来说,当最好的时候交换为0次,最差的时候交换为n-1次。所以总的时间复杂度依然为O(n2n^2n2)

尽管与冒泡排序同为O(n2n^2n2),但简单选择排序的性能要略优于冒泡排序。

简单选择排序实现(Java)的更多相关文章

  1. 简单选择排序(Java)

    简单选择排序: 每一趟在整个记录中找到最小的那个作为有序序列的第i个记录. class SelectSort{ public void p(int[] a){ for(int i=0;i<a.l ...

  2. 常见排序算法总结:插入排序,希尔排序,冒泡排序,快速排序,简单选择排序以及java实现

    今天来总结一下常用的内部排序算法.内部排序算法们需要掌握的知识点大概有:算法的原理,算法的编码实现,算法的时空复杂度的计算和记忆,何时出现最差时间复杂度,以及是否稳定,何时不稳定. 首先来总结下常用内 ...

  3. 排序系列 之 简单选择排序及其改进算法 —— Java实现

    简单选择排序算法: 基本思想: 在待排序数据中,选出最小的一个数与第一个位置的数交换:然后在剩下的数中选出最小的数与第二个数交换:依次类推,直至循环到只剩下两个数进行比较为止. 实例: 0.初始状态 ...

  4. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...

  5. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  6. Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找

    琐碎知识: 水仙花数, ASCII码, 冒泡排序, 简单选择排序, 折半查找 1.水仙花数 每位数的平方的和等于本身. 如100到999之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...

  7. Java排序算法(二):简单选择排序

    [基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用 ...

  8. 冒泡排序与简单选择排序——Java实现

    1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...

  9. 选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现

    基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...

随机推荐

  1. 2018.10.18 poj2187Beauty Contest(旋转卡壳)

    传送门 旋转卡壳板子题. 就是求凸包上最远点对. 直接上双指针维护旋转卡壳就行了. 注意要时刻更新最大值. 代码: #include<iostream> #include<cstdi ...

  2. python小练习--函数调用函数,让对象具有能动性

    class Box:#定义一个类名为Box,类名后不必有括号,类包含类属性和类方法,这个类没有定义类属性 '''这是一个计算体积的类'''#这是这个类的__doc__属性,执行类后就可以在交互界面输入 ...

  3. C#和MatLab的混合编程(充分利用二者的优势)

    C#和MatLab的混合编程,充分利用了winform的直观显示和matlab的强大计算能力.在此以一个小例子的形式给大家讲述一下二者混合编程的实现. 一.软件的配置说明 C#版本:VS2010:Ma ...

  4. Linux必须学的东西,鉴于各大公司实际开发都不用Windows系统

    Windows安全性比较差,所以各大公司会使用其他的平台,所以像Linux就是很常用的,基于Unix的开源系统,鉴于很多人写的很散,所以自己总结下对于自己有用的重点,现在总结下简单的linxu的命令使 ...

  5. linux安装mysql~~~mysql5.6.12

    Linux安装mysql服务器 准备: MySQL-client-5.6.12-1.rhel5.i386.rpm MySQL-server-5.6.12-1.rhel5.i386.rpm 首先检查环境 ...

  6. Spring3.x错误--Pointcut is not well-formed:expecting 'name pattern' at...

    Spring3.x错误: 解决方法: (*com.dayang.service..*(..))     *和com.dayang.之间有空格

  7. MFC框架仿真<二>

  8. (网络流 模板 Dinic) Drainage Ditches --POJ --1273

    链接: http://poj.org/problem?id=1273 代码: //Dinic #include<stdio.h> #include<string.h> #inc ...

  9. HDU1237 简单计算器 2016-07-24 13:34 193人阅读 评论(0) 收藏

    简单计算器 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过 ...

  10. ploymer

      developer guide 接下来看声明属性 声明属性 声明属性时,可设定的参数 type:属性反序列化 value:[function(){}],配置属性默认值 readonly refle ...