简单选择排序算法:

 基本思想:

  在待排序数据中,选出最小的一个数与第一个位置的数交换;然后在剩下的数中选出最小的数与第二个数交换;依次类推,直至循环到只剩下两个数进行比较为止。

 实例:

  0.初始状态 3,1,5,7,2,4,9,6(共8个数)

  1.n=8 个数中,最小数值为1,与第一个数交换:1,3,5,7,2,4,9,6

  2.剩下 n-1=7 个数中,最小数值为2,与第二个数交换:1,2,5,7,3,4,9,6

  3.剩下 n-2=6 个数中,最小数值为3,与第三个数交换:1,2,3,7,5,4,9,6

  4.剩下 n-3=5 个数中,最小数值为4,与第四个数交换:1,2,3,4,5,7,9,6

  5.剩下 n-4=4 个数中,最小数值为5,与第五个数交换:1,2,3,4,5,7,9,6

  6.剩下 n-5=3 个数中,最小数值为6,与第五个数交换:1,2,3,4,5,6,9,7

  7.剩下 n-6=2 个数中,最小数值为7,与第五个数交换:1,2,3,4,5,6,7,9


 简单选择排序算法的改进:

 基本思想:

  简单选择排序算法,每次只选择一个数据放在正确的位置,为提高效率,可每次选择两个数据,放在正确的位置,及每次选择最大值和最小值。

 实例:

  0.初始状态 3,1,5,7,2,4,9,6(共8个数)

  1.n=8 个数中,最小数值为1,与第一个数交换;最大数值为9,与最后一个数交换:1,3,5,7,2,4,6,9

  2.剩下n-2=6个数中,最小数值为2,与第二个数交换;最大数值为7,与倒数第二个数交换:1,2,5,6,3,4,7,9

  3.剩下n-4=4个数中,最小数值为3,与第三个数交换;最大数值为6,与倒数第三个数交换:1,2,3,4,5,6,7,9

  4.剩下n-6=2个数中,最小数值为4,与第四个数交换;最大数值为5,与倒数第四个数交换:1,2,3,4,5,6,7,9


 Java实现:

/**
* 选择排序 及其 改进算法 的实现
* 不稳定算法
* @author 那一季的银杏叶
*
*/
public class SelectSort { public static void main(String[] args) {
// TODO Auto-generated method stub
new SelectSort().run();
}
public void run(){
int a[] = {3,1,5,7,2,4,9,6};
/**
* 选择排序
*/
selectSort(a);
/**
* 选择排序的改进--二元选择排序
*/
selectTwoSort(a);
}
/**
* 选择排序 每次选出最小的元素
* @param a
*/
private void selectSort(int[] a) {
// TODO Auto-generated method stub
System.out.println("———————————————————选择排序算法———————————————————");
int n=a.length;
for(int i=0;i<n;i++){
int k=i;
for(int j=i;j<n;j++){
if(a[j] < a[k]){
k=j;
}
}
if(k != i){
int temp = a[i];
a[i]=a[k];
a[k] = temp;
}
print(a,n,i);
}
printResult(a,n);
}
/**
* 选择排序的 改进算法
* 每次选出最大的数和最小的数
* @param a
*/
private void selectTwoSort(int[] a){
System.out.println("———————————————选择排序算法——的改进—————————————————");
int n=a.length;
int i,j,max,min,temp;
for(i=0;i<n/2;i++){
max=i;
min=i;
for(j = i+1;j<n-i;j++){
if(a[j]<a[min]){
min=j;
}
if(a[j]>a[max]){
max=j;
}
}
temp = a[i];
a[i] = a[min];
a[min] = temp; temp = a[n-i-1];
a[n-i-1] = a[max];
a[max] = temp;
print(a,n,i);
}
printResult(a,n);
}
/**
* 打印排序的最终结果
* @param a
* @param n
*/
private void printResult(int[] a, int n){
System.out.print("最终排序结果:");
for(int j=0;j<n;j++){
System.out.print(" "+a[j]);
}
System.out.println();
}
/**
* 打印排序的每次循环的结果
* @param a
* @param n
* @param i
*/
private void print(int[] a, int n, int i) {
// TODO Auto-generated method stub
System.out.print("第"+i+"次:");
for(int j=0;j<n;j++){
System.out.print(" "+a[j]);
}
System.out.println();
}
}

 运行结果展示:

 
  (本文仅供学习交流,如有更好的思路,欢迎留下意见供大家探讨学习~)
 

排序系列 之 简单选择排序及其改进算法 —— Java实现的更多相关文章

  1. Html5 简单选择排序演示

    简单选择排序,是选择排序算法的一种.基本思想:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止.由于在每次循环中,会对数值相等的元素改变位置,所以属于非稳定 ...

  2. 八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

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

  3. 简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort

    选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录. 如第i趟选择排序就是在 ...

  4. 选择排序—简单选择排序(Simple Selection Sort)

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

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

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

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

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

  7. [Swift]八大排序算法(三):选择排序 和 简单选择排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

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

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

  9. 选择类排序 (简单选择排序,堆排序)— c语言实现

    选择类排序包括: (1)  简单选择排序 (2)树形选择排序 (3)堆排序 简单选择排序: [算法思想]:在第 i 趟简单选择排序中,从第 i 个记录开始,通过 n - i 次关键字比较,从 n - ...

随机推荐

  1. GO语言学习

    1. 语言特色 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了. 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多 ...

  2. 简单谈一谈JavaScript中的变量提升的问题

    1,随笔由来 第一天开通博客,用于监督自己学习以及分享一点点浅见,不出意外的话,应该是一周一更或者一周两更.  此博客所写内容主要为前端工作中遇上的一些问题以及常见问题,在此基础上略微发表自己的一点浅 ...

  3. shell-参数做下标

    test.sh #!/bin/bash#用第3个参数作为下标或position,来获取参数param=$(eval echo \$$3)echo "hello, $param"

  4. Discuz中解决jquery 冲突的方法 绝对简单

    将jquery.js在common.js之前载入,不然jquery的$()函数会覆盖common.js的$()函数: 然后用到jQuery的$()函数的地方都用jQuery()代替. 例如 $(doc ...

  5. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  6. 用PHP解析类JSON字符串为数组的实现

    题目:把字符串嵌套关系转换成数组,字符串只包含成对中括号.数字和逗号字符串:(1,(1,2,(1,(1,2,(1)),3)),3,(1,(1,2,((1((1,(1,2,(1,2,3),4,5),3) ...

  7. ASCII表

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧 ...

  8. .net下开发ActiveX控件

    `   ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ActiveX, 可 ...

  9. hibernate入门实例

    1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...

  10. T-SQL中找出一个表的所有外键关联表

    二种方法(下例中表名为T_Work) 1.SQL查询系统表 SELECT 主键列ID=b.rkey ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.r ...