所谓选择排序,就是第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
以此类推,直到全部待排序的数据元素的个数为零。
选择排序是不稳定的排序方法。
具体步骤:
1.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
2.从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3.重复第二步,直到所有元素均排序完毕。
具体代码如下:
第一次排序结果
package demo.array;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {10,8,12,5,20};
//选择排序
//第一次
int minIndex = 0;
int min = arr[0];
for(int j=1+0;j<arr.length;j++){
if(min > arr[j]){
min=arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[0];
arr[0] = min;
System.out.println("第一次排序结果");
System.out.println(Arrays.toString(arr));
}
}
第二次,第三次,第四次一次排序结果如下:
package demo.array;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {10,8,12,5,20};
//选择排序
//第一次
int minIndex = 0;
int min = arr[0];
for(int j=1+0;j<arr.length;j++){
if(min > arr[j]){
min=arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[0];
arr[0] = min;
System.out.println("第一次排序结果");
System.out.println(Arrays.toString(arr));
minIndex = 1;
min = arr[1];
for(int j=1+1;j<arr.length;j++){
if(min > arr[j]){
min=arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[1];
arr[1] = min;
System.out.println("第二次排序结果");
System.out.println(Arrays.toString(arr));
minIndex = 2;
min = arr[2];
for(int j=1+2;j<arr.length;j++){
if(min > arr[j]){
min=arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[2];
arr[2] = min;
System.out.println("第三次排序结果");
System.out.println(Arrays.toString(arr));
minIndex = 3;
min = arr[3];
for(int j=1+3;j<arr.length;j++){
if(min > arr[j]){
min=arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[3];
arr[3] = min;
System.out.println("第四次排序结果");
System.out.println(Arrays.toString(arr));
}
}
根据几次运行规律通过双层for循环实现整体代码
package demo.array;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {10,8,12,5,20};
selectSort(arr);
//选择排序
//第一次
// int minIndex = 0;
// int min = arr[0];
// for(int j=1+0;j<arr.length;j++){
// if(min > arr[j]){
// min=arr[j];
// minIndex = j;
// }
// }
// arr[minIndex] = arr[0];
// arr[0] = min;
// System.out.println("第一次排序结果");
// System.out.println(Arrays.toString(arr));
//
// minIndex = 1;
// min = arr[1];
// for(int j=1+1;j<arr.length;j++){
// if(min > arr[j]){
// min=arr[j];
// minIndex = j;
// }
// }
// arr[minIndex] = arr[1];
// arr[1] = min;
// System.out.println("第二次排序结果");
// System.out.println(Arrays.toString(arr));
//
//
// minIndex = 2;
// min = arr[2];
// for(int j=1+2;j<arr.length;j++){
// if(min > arr[j]){
// min=arr[j];
// minIndex = j;
// }
// }
// arr[minIndex] = arr[2];
// arr[2] = min;
// System.out.println("第三次排序结果");
// System.out.println(Arrays.toString(arr));
//
// minIndex = 3;
// min = arr[3];
// for(int j=1+3;j<arr.length;j++){
// if(min > arr[j]){
// min=arr[j];
// minIndex = j;
// }
// }
// arr[minIndex] = arr[3];
// arr[3] = min;
// System.out.println("第四次排序结果");
// System.out.println(Arrays.toString(arr));
}
public static void selectSort(int[] arr){
for(int i=0;i<arr.length;i++){
int minIndex = i;
int min = arr[i];
for(int j=1+i;j<arr.length;j++){
if(min > arr[j]){
min=arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println("排序结果");
System.out.println(Arrays.toString(arr));
}
}