示例数组:
int[] arr = {3,2,4,5,7,6,1};
遍历数组:
public static void printArray(int[] arr)
{
System.out.print("{");
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
{
System.out.print(arr[x]+",");
}else
{
System.out.println(arr[x]+"}");
}
}
}
对数组中两个元素互换位置:
public static void swap(int[] arr, int a, int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
对数组中元素选择排序:
public static void selectSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
swap(arr,x,y);//将x,y角标的两个元素置换位置
}
}
}
选择排序的思路:
原始数组角标与元素对照。简图如下:
角 标:[0] [1] [2] [3] [4] [5] [6]
数组元素:3 2 4 5 7 6 1
内层第一次循环执行了什么?内层循环结束结果是什么?
如代码所示:内层第一次循环:如果0角标的元素值大于1角标的元素值,将这两个元素进行互换位置。反之,不互换位置。执行结果简图如下:
角 标:[0] [1] [2] [3] [4] [5] [6]
数组元素:2 3 4 5 7 6 1
内层循环继续循环,当比较arr.length-1次数后,确定数组中最小的元素,并将它放在了0角标的位置,即最左边。执行结果简图如下:
角 标:[0] [1] [2] [3] [4] [5] [6]
数组元素:1 3 4 5 7 6 2
当角标为0的元素确定后,就不再参与比较,就好像说:“我最小,你们玩吧!我不给你们玩了”。外层第二次循环,将数组中角标为1的元素按照以上说的方式与后边的元素依次比较,最后比较出最小的元素放在了1角标的位置上。以后后边的元素依次按照这种方式确定位置,所以数组中的元素按照由小到大的顺序排列了。执行结果简图如下:
角标:[0] [1] [2] [3] [4] [5] [6]
一次:1 3 4 5 7 6 2
二次:1 2 4 5 7 6 3
三次:1 2 3 5 7 6 4
四次:1 2 3 4 7 6 5
五次:1 2 3 4 5 7 6
六次:1 2 3 4 5 6 7