Java再学习-算法之选择排序

 继上篇文章讲到插入排序和冒泡排序算法。这次来看一下选择排序。

        和上两个循环一样,还是分成两套循环,外循环起指针作用,用来指定每次循环的元素值和元素序列,而内部循环则起到真正的快速排序逻辑。首先如果我们取到第i值,那么我们要与第i+1,i+2,....等元素进行对比,找到i元素后面最小的元素,与之交换位置即可,只不过这里的交换位置比较新颖,我们看下面的代码:

package cn.tgb.sort;

import java.util.Arrays;

//选择排序
public class SelectionSort {
	// 生成随机数
	private static int[] input = new int[] { (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));
		//外循环起到指针作用
		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];
			//当前指针的值,变成了最小值key
			input[i] = key;

			//打印每次排序的结果
			System.out.println("第" + (i + 1) + "次排序");

			for (int k = 0; k < input.length; k++) {
				System.out.print(input[k] + " ");
			}
			System.out.println(" ");
		}
	}
}

执行结果如下图所示:

在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

          综上,冒泡排序,插入排序和选择排序,根据元素序列的不同情况,来选择合适的排序算法。

时间: 2024-11-02 23:46:00

Java再学习-算法之选择排序的相关文章

java结构与算法之选择排序

一 .java结构与算法之选择排序 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到最小值 4 放在最右边,然后找到 5 放在  4 的后面,重复该操作. 选择排序参考代码: public class ChooseSort { int[] array = null; @Test public void testPopSort() { array = new int[5]; array[0] = 45

JavaScript ,Python,java,Go系列算法之选择排序

常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧.通俗来说就是你们中间谁最小谁就出列,站到队列的最后边,然后继续对着剩余的无序数组说你们中间谁最小谁就出列,站到队列的最后边,一直到最后一个,继续站到最后边,这样数组就有了顺序,从小到大. 1.算法步骤 首先在未排

java常见数据算法_选择排序

选择排序的原理:遍历所有的元素,得到最小的元素,并将最小的元素与左边第一个元素进行交换,再次遍历除了第一个位置的所有元素,得到最小的元素,与左边第二个元素进行交换.当进行第二次遍历的时候,将最小的元素与左边的第二个元素进行交换,如此循环遍历,即可得到排序后的元素.Demo实现的基本基本步骤:1.准备数组2.编写常见的数组操作方法3.编写选择排序的方法4.测试选择排序具体参考如下:package com.zcp.ch03; /** @author Administrator 冒泡排序的实现*/pu

Java再学习-算法之插入排序

继上篇讲了冒泡排序的原理和代码,今天来讲一讲关于插入算法的逻辑. 和冒泡排序不同,排序算法,是选择一个元素依次和位于前面的元素进行比较.比如我选择的是第i个元素,则要判断第i-1个元素的大小.         插入排序也分成两套循环,外套循环比如是指针,来选择从第几个元素开始比较,而内套循环则要开始比较选择元素和前面元素的大小,进行排序. 代码如下: package cn.tgb.sort; import java.util.Arrays; //插入排序 public class InsertS

Java再学习-算法之冒泡排序

 Java排序,据说有八大排序,小编这次系列博客可能讲不了全部,我将自己理解比较到位的几个排序,和大家分享一下吧.今天来说一说冒泡排序,其实冒泡排序属于交换排序的一种,冒泡排序是最经典的交换排序,它的算法思想是:(假设数据存放在数组a[n]中) 1.比较a[0]和a[1],如果a[0]>a[1],则交换a[0],a[1],然后比较新的a[1](可能是原来的a[0])和a[2],如果a[1]>a[2],则交换a[1],a[2],以此类推,直到a[n-2]和a[n-1]比较完毕,这样,a中的最大数

Java中的经典算法之选择排序(SelectionSort)

Java中的经典算法之选择排序(SelectionSort) a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.(这里只介绍常用的简单选择排序) b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数

【从0到1学算法】选择排序

又到了算法时间,今天我们来学第二种算法---选择排序.这里有个表格,记录了乐队及其作品的播放次数,如下: 要将它们按播放次数从多到少排序,要怎么做呢?有一种方法是这样子的,遍历列表,找出播放次数最多的乐队,将这个乐队添加到一个新的列表中. 再次这样做,找出第二多的乐队. 循环上述做法,最终便可得到一个有序列表. 上述这种算法便是选择排序法,n次遍历列表选出最大/小进行排序.我们用代码来一遍呗.题目:对一个数组从小大排序 # 找到最小值的索引 def?find_smallest(arr): ? ?

常用算法之----选择排序

Java中的经典算法之选择排序(SelectionSort) a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.(这里只介绍常用的简单选择排序) b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数

【排序算法】选择排序(Selection sort)

0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n-1 次交换.在所有的完全依