排序是数组中经常用到的功能,这里主要讲选择排序
选择排序,就是依次固定每个下标,让每个固定下标的数和后面所有数据进行比较,假定现在有一个整型数组{23,4,56,166,2},对它进行从小到大选择排序
先固定下标0,也就是第一个数23,与下标为1,第二个数4进行比较,发现第二个数4比第一个数23小,那么就将23和4进行交换,变为{4,23,56,166,2},接下来还是下标0和下标2进行比较,56比4要大,不进行交换,之后,下标0和下标3进行比较,166比4大,不进行交换,最后,下标0和下标5进行比较,2比4小,进行交换,数组变为{2,23,56,166,4}
可以发现,经过这一轮比较,下标0已经是这五个数中最小的数了,接下来还是利用这个原理,固定下标1,与后面的所有的数据进行比较,如果后面的数,小于下标1中的数,那么就交换,大于就继续往下走,需要注意的是,固定的是下标,不是数,也就是说,交换之后,也是用下标1中的数进行比较,经过这一轮比较,数组中第二小的位置就被放到下标1的位置了,即{2,4,56,166,23}
接下来按照这个原理,对剩下的三个数进行比较,就可以实现从小到大排序,这就是选择排序,下面是java代码实现
class Demo
{
public static void main(String[] args)
{
//定义要比较的数组
int[] arr = {23,4,56,166,2};
//调用选择排序函数
selectSort(arr);
//打印数组,用逗号间隔
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[] arr)
{
//外层循环控制总共比较的轮数,5个数总共比较4轮(最后一个数不用比较)
for(int i=0;i<arr.length-1;i++)
{
//从下标i+1开始,直到最后一个数,与第一个数进行比较
for(int j=i+1;j<arr.length;j++)
{
//小于则交换,大于则继续循环
if(arr[j]<arr[i])
{
//交换
exchange(arr,j,i);
}
}
}
}
//交换整型数组中的两个下标中的数
public static void exchange(int[] arr,int i,int j)
{
int c;
c = arr[i];
arr[i] = arr[j];
arr[j] = c;
}
}