Java排序再巩固--SelectionSort

原创 2016年06月03日 11:41:54

       在上一篇排序算法的博客中,小编已经带大家一起回顾了经典的冒泡排序,这篇博文中小编就与大家再次分享高效的选择排序!和冒泡排序相比,选择排序的比较次数和冒泡相同,但是交换次数远远少于冒泡排序;

       在这里,小编先给大家提供一个插图来了解选择排序的逻辑结构:


      有了基本了解之后,我们直接通过程序来进一步的明确选择排序的执行情况:

import java.util.Arrays;

import javax.swing.InputVerifier;

import com.sun.org.apache.bcel.internal.generic.INEG;


/**
 * 
 * 将随机数组成的数组元素进行升序排序
 * @author root
 *
 */
public class SelectionSort {
	
	//使用生成的随机数组成一个一维的int数组;
	private static int[] input = new int[]{48,68,36,74,89,13,71
//		(int)(Math.random()*100),
//		(int)(Math.random()*100),
//		(int)(Math.random()*100),
//		(int)(Math.random()*100),
//		(int)(Math.random()*100),
//		(int)(Math.random()*100),
//		(int)(Math.random()*100)
	};
	
	public static void main(String[] args) {
		System.out.println(Arrays.toString(input));
		
		/**
		 * 执行逻辑
		 * 1.将第i个作为要比较的对象
		 * 2.将第j个对象和第i个对象进行比较:
		 * 		如果下标为i的元素小于 下标为j的元素,key的值不变,反之,i和j对应的元素交换位置;
		 *      同时index的下标发生相应的交换变化;
		 * 
		 */
		for (int i = 0; i < input.length-1; i++) {
			int key = input[i];
			int index =i;
			
			for (int j = i+1; j < input.length; j++) {
				key = key <input[j] ? key: input[j];
				index = key < input[j] ? index: j; 
			}
			
			input[index] = input[i];
			input[i] =key;
			
			System.out.println("第" + (i+1) + "次排序");
			
			for (int k = 0; k < input.length; k++) {
				System.out.println(input[k] + "   ");
			}
			
			System.out.println("  ");
		}
	}
}
       需要注意的是,在选择排序中,我们需要定义一个被比较的对象,也就是该轮排序的参照对象;小编将上述程序的循环过程整理出来:

i = 0 :  将第1个元素作为指标,与其他元素进行比较;如果指标大,则将指标和

被比较的对象的keyindex都进行互换;

j=1 也就是4868进行对比;所以顺序不变;

j=2 也就是4836进行比较,不满足条件,所以indexkey值都做相应的换位

(切记在这一步,input的值并不发生改变)

……

j=6  到这里,3613进行比较,循环到此结束,所以将13放到index=0的位置,

也就是说当前数组中 1348进行换位,即筛选出了最小值;

i=1;  

j=1;

j=2

……

j=6

……

i=6:

j=1;

j=2

……

j=6


        从上面的程序可以看出来,选择排序的每一次循环中,我们都会记下一个最小的一个元素的下标,待该轮所有比较结束之后我们便将最小的元素与未排序的那部分的最前的一个元素交换,完成这次的排序;这样也在减少交换的次数的同时,提高了排序的效率;这样我们便可以很容易的理解下面的运行结果:

         可以看出,在每一次循环的时候,都会筛选未排序的部分中最小的元素,并放到序列的第N个元素的位置(也就是下标为N-1的位置);

        最后,简单总结一下冒泡排序和选择排序:


           以上就是小编对选择排序及与冒泡排序之间的比较的整理,希望能帮到大家理解和区分使用;

     

版权声明:本文为博主原创文章,未经博主允许不得转载。

经典算法-选择排序(SelectionSort)

原理每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于...

选择排序(1)SelectionSort

main.cc /*----------------------------------------------- Created By EverSteins Email:EverS...

选择排序 - SelectionSort

选择排序-SelectionSort选择排序是一种很直观的排序算法,就是每次选出最小(大)的元素,依次放在序列的前面。基本思想在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数 交换(s...

c/c++选择排序(SelectionSort)

选择排序原理是,先选取第一个数与其他所有数比较,把比较后的最小的数与第一个数交换,这样每执行一次循环就会将最小的数排到最左边,并且下一次循环比较时就会从第二个数再进行比较,也就是少比较一次,同冒泡排序...

排序算法 之 选择排序SelectionSort

介绍选择排序无疑是最简单直观的排序。它的工作原理如下。步骤 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 以此类...

【代码积累】SelectionSort

public class main { public static void main(String[] args) { // TODO Auto-generated method stub ...

Java实现计数排序

  • 2017年12月05日 17:26
  • 1KB
  • 下载

堆排序算法Java面向对象实现源码

  • 2017年11月25日 10:13
  • 682KB
  • 下载

java学习之路 之 面向对象编程-main方法的语法、数组排序、操作数组的工具类、数组操作常见问题

理解main方法的语法 由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的...

java数组自定义排序

  • 2017年10月31日 15:35
  • 680B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java排序再巩固--SelectionSort
举报原因:
原因补充:

(最多只允许输入30个字)