自学算法 之 [选择排序](JAVA)

简介

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

简单来说就是:

1、指针 i 指向第一个元素,然后把指针 j 依次指向后面的元素(从第i + 1个元素开始),在所有的 j 的值和 i 的值中,找到其中最小值,与 i 位置交换(最小值为i,则 i 与自身交换)。
2、指针 i 指向第二个元素,过程同1。
……
3、当 i == arr.length,循环结束,排序结束。

举个例子:

我们要对 [3,5,1,2,4] 排序。“[ ]”表示 i 指针的位置。

1、 [[3],5,1,2,4] i = 0, min(3, 5, 1, 2, 4) = 1
2、 [[1],5,3,2,4] 交换。
3、[1,[5],3,2,4] i = 1, min(5, 3, 2, 4) = 2
4、[1,[2],3,5,4] 交换。
5、[1,2,[3],5,4] i = 2, min(3, 5, 4) = 3
6、[1,2,[3],5,4] 交换(3与3本身进行交换)。
7、[1,2,3,[5],4] i = 3, min(5, 4) = 4
8、[1,2,3,[4],5] 交换。
9、i = 4,循环结束。

思路

只需套两个for循环,第一个是指针 i,第二个是指针 j,每次都找到最小值把它放到 i 的位置,就是选择排序的思路。

完整代码

public class 选择排序
{
	static void select_Sort(int[] arr)
	{
		for(int i = 0; i < arr.length - 1; i++)
		{
			int min = i;
			for(int j = i + 1; j < arr.length; j++)
			{
				if(arr[j] < arr[min])	//遇到更小的,记录它的索引
					min = j;
			}
			int temp = arr[i];	//小的值与i位置交换
			arr[i] = arr[min];
			arr[min] = temp;
		}
	}
	
	public static void main(String[] args)
	{
		int[] arr = {3, 2, 6, 1, 4, 5};
		select_Sort(arr);
		
		for(int i = 0; i < arr.length; i++)
		{
			System.out.print(arr[i] + " ");
		}
	}
}

输出结果:

1 2 3 4 5 6
原创文章 9 获赞 2 访问量 854

猜你喜欢

转载自blog.csdn.net/cxrshiz7890/article/details/105698901