分析圖:
代碼:
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));
}
}
}