比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。
待排序的数组A的值分别是:
A[0] A[1] A[2] A[3] A[4] A[5] A[6]:
49 38 65 97 76 13 27
1、将A[0]的值与后面A[1]到A[6]的值作比较,如果发现有比A[0]小的数就进行交换操作。
进行第一趟交换后:13 49 65 97 76 38 27
得到第一个最小值为13
2、将A[1]的值与后面A[2]到A[6]的值作比较,如果发现有比A[1]小的数就进行交换操作。
进行第二趟交换后:13 27 65 97 76 49 38
得到第二个最小值为27
3、将A[2]的值与后面A[3]到A[6]的值作比较,如果发现有比A[2]小的数就进行交换操作。
进行第三趟交换后:13 27 38 97 76 65 49
得到第三个最小值为38
4、将A[3]的值与后面A[4]到A[6]的值作比较,如果发现有比A[3]小的数就进行交换操作。
进行第四趟交换后:13 27 38 49 97 76 65
得到第四个最小值为49
5、将A[4]的值与后面A[5]到A[6]的值作比较,如果发现有比A[4]小的数就进行交换操作。
进行第五趟交换后:13 27 38 49 65 97 76
得到第五个最小值为65
6、将A[5]的值与后面A[6]的值作比较,如果发现比A[5]小就进行交换操作。
进行第六趟交换后:13 27 38 49 65 76 97
得到第六个最小值为76
此时比较就全部结束,那么经过一躺快速排序之后的结果是:13 27 38 49 65 76 97
初始状态 : 【49 38 65 97 76 13 27】
选择排序后 : 【13 27 38 49 65 76 97】
如何用JAVA代码实现呢?
public class Sort
{
public static void main(String[] args)
{
int[] arr = { 49, 38, 65, 97, 76, 13, 27 };
arrayPrint(arr);
selectSort(arr);
arrayPrint(arr);
}
/**
* 选择排序逻辑部分
* @param arr
*/
public static void selectSort(int[] arr)
{
for (int i = 0; i < arr.length - 1; i++)
{
for (int j = i + 1; j < arr.length; j++)
{
if (arr[i] > arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
/**
* 打印数组
* @param arr
*/
public static void arrayPrint(int[] arr)
{
System.out.print("[");
for (int i = 0; i < arr.length; i++)
{
if (i != arr.length - 1)
System.out.print(arr[i] + ",");
else
System.out.println(arr[i] + "]");
}
}
}