简介
选择排序(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