分析图:
代码:
package com.bjpowernode.demo02;
import java.util.Arrays;
/**
* 选择排序过程
* 由小到大
* @author Administrator
*
*/
public class Test10 {
public static void main(String[] args) {
int [] data = {56,21,43,89,7,66};
System.out.println(Arrays.toString(data));
System.out.println("===========================");
//1)从整个数组中找最小的交换到0位置
int min = 0 ; //保存最小元素的下标
for( int i = 1; i < data.length ; i++){
if ( data[i] < data[min]) {
min = i;
}
}
System.out.println("min==" + min);
//交换到0位置
int t = data[0];
data[0] = data[min];
data[min] = t;
System.out.println(Arrays.toString(data));
//2)除了0元素外, 从数组剩余的元素中找最小的交换到1位置
min = 1 ; //保存最小元素的下标
for( int i = min + 1; i < data.length ; i++){
if ( data[i] < data[min]) {
min = i;
}
}
System.out.println("min==" + min);
//交换到1位置
if ( min != 1) {
t = data[1];
data[1] = data[min];
data[min] = t;
}
System.out.println(Arrays.toString(data));
//3)除了0,1元素外, 从数组剩余的元素中找最小的交换到2位置
min = 2 ; //保存最小元素的下标
for( int i = min + 1; i < data.length ; i++){
if ( data[i] < data[min]) {
min = i;
}
}
System.out.println("min==" + min);
//交换到2位置
if ( min != 2) {
t = data[2];
data[2] = data[min];
data[min] = t;
}
System.out.println(Arrays.toString(data));
//4)除了0,1,2元素外, 从数组剩余的元素中找最小的交换到3位置
min = 3 ; //保存最小元素的下标
for( int i = min + 1; i < data.length ; i++){
if ( data[i] < data[min]) {
min = i;
}
}
System.out.println("min==" + min);
//交换到3位置
if ( min != 3) {
t = data[3];
data[3] = data[min];
data[min] = t;
}
System.out.println(Arrays.toString(data));
//5)除了0,1,2,3元素外, 从数组剩余的元素中找最小的交换到4位置
min = 4 ; //保存最小元素的下标
for( int i = min + 1; i < data.length ; i++){
if ( data[i] < data[min]) {
min = i;
}
}
System.out.println("min==" + min);
//交换到4位置
if ( min != 4) {
t = data[4];
data[4] = data[min];
data[min] = t;
}
System.out.println(Arrays.toString(data));
}
}
以上还可以简化为:循环方式。
package com.bjpowernode.demo02;
import java.util.Arrays;
/**
* 选择排序
* 由小到大
* @author Administrator
*
*/
public class Test11 {
public static void main(String[] args) {
int [] data = {56,111,21,543,89,7,66};
System.out.println(Arrays.toString(data));
System.out.println("===========================");
for(int x = 0 ; x < data.length - 1; x++){
//1)从整个数组中找最小的交换到0位置
int min = x ; //保存最小元素的下标
for( int i = min + 1; i < data.length ; i++){
if ( data[i] < data[min]) {
min = i;
}
}
System.out.println("min==" + min);
//交换到x位置
if (x != min) {
int t = data[x];
data[x] = data[min];
data[min] = t;
}
System.out.println(Arrays.toString(data));
}
}
}