选择排序(Selection sort)是一种简单直观的排序算法。
基本思路:
选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入第二层循环之前,先将外层循环的下标赋值给临时变量,接下来进入第二层循环中,如果发现有比这个位置元素更小(或者大)的元素,则将那个更小(或者更大)的元素的下标赋值给临时变量,最后,在退出里层循环后,判断临时变量是否改变,如果临时变量改变啦,则说明,有比当前外层循环位置更小(或者更大)的元素,将这两个位置的元素交换即可。
算法代码如下:
for(int i=0; i<a.length-1; i++)
{
minIndex = i;//无序区的最小数据数组下标
for(int j=i+1; j<a.length; j++)
{
//在无序区中找到最小数据并保存其数组下标
if(a[j] < a[minIndex]) //对于不同的具体问题,我们只需要改变这里的比较条件即可。
{ //现在是直接比较数组元素自身(这种情况是最简单的)
minIndex = j;
}
}
if(minIndex != i)
{
//如果不是无序区的最小值位置不是默认的第一个数据,则交换之。
temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
下面是一个具体的例子:
public class SelectSort
{
public static void main(String[] args)
{
int[] arr = {55,21,-5,0,86,23,9,-100};
selectSort(arr);
System.out.println("选择排序后:");
for(int i=0; i<arr.length; i++)
{
if(i != arr.length-1)
System.out.print(arr[i] + ",");
else
System.out.print(arr[i]);
}
}
//选择排序
public static void selectSort(int[] a)
{
int minIndex = 0;
int temp = 0;
if((a==null)||(a.length==0))
return;
for(int i=0; i<a.length-1; i++)
{
minIndex = i;//无序区的最小数据数组下标
for(int j=i+1; j<a.length; j++)
{
//在无序区中找到最小数据并保存其数组下标
if(a[j] < a[minIndex]) //对于不同的具体问题,我们只需要改变这里的比较条件即可。
{ //现在是直接比较数组元素自身(这种情况是最简单的)
minIndex = j;
}
}
if(minIndex != i)
{
//如果不是无序区的最小值位置不是默认的第一个数据,则交换之。
temp = a[i];
a[i] = a[minIndex];
a[minIndex] = temp;
}
}
}
}
/*
程序输出如下:
选择排序后:
-100,-5,0,9,21,23,55,86
*/