选择排序:(O(n^2)→不稳)的排序算法和优化空间
废话不多说代码如下,如果有用可以点赞评论收藏哦,大家一起学习加油!
↓↓↓
- 第一种:从大到小排序,并且做到优化程序。
package com.shiyang.algorithm;
public class SelectionSort01 {
public static void main(String[] args) {
int[] arr = {
5, 3, 6, 9, 8, 4, 2, 1, 7, 0};
for (int i = 0; i < arr.length - 1; i++) {
int minPos = i;
for (int j = i + 1; j < arr.length; j++) {
minPos = arr[j] < arr[minPos] ? j : minPos;
}
Swap(arr, i, minPos);
//外层循环次数
System.out.print("第 " + (i + 1) + " 次交换:\t");
printArr(arr);
//最小值坐标位置
System.out.println("minPos为:" + minPos);
}
}
public static void printArr(int[] arr) {
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k] + "\t");
}
}
public static void Swap(int[] arr, int initialMin, int minPos) {
int temp = arr[initialMin];
arr[initialMin] = arr[minPos];
arr[minPos] = temp;
}
}
- 第二种(进阶):从大到小排序,并且做到一次循环分别找到最大值和最小值排序。
package com.shiyang.algorithm;
import java.util.Date;
public class SelectionSort02 {
public static void main(String[] args) {
Date data = new Date();
long time1 = data.getTime();
int[] arr = {
5, 3, 6, 9, 8, 4, 2, 1, 7, 0};
for (int i = 0, k = arr.length - 1; i < k; i++, k--) {
int minPos = i;
int maxPos = k;
for (int j = i + 1, l = k - 1; j < arr.length; j++, l--) {
minPos = arr[j] < arr[minPos] ? j : minPos;
maxPos = arr[l] > arr[maxPos] ? l : maxPos;
}
//调用交换方法
Swap(arr, i, minPos, k, maxPos);
//外层循环次数
System.out.print("第 " + (i + 1) + " 次交换:\t");
//打印每次交换结果
printArr(arr);
//打印最小值坐标位置
System.out.print("minPos为:" + minPos);
//打印最大值坐标位置
System.out.println("\tmaxPos为:" + maxPos);
}
long time2 = data.getTime();
System.out.println("程序运行耗时" + (time2 - time1));
}
//打印数组的方法
public static void printArr(int[] arr) {
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k] + "\t");
}
}
//交换位置的方法
public static void Swap(int[] arr, int initialMin, int minPos, int maxPos, int initialMax) {
int temp = arr[initialMin];
arr[initialMin] = arr[minPos];
arr[minPos] = temp;
//最大值和最小值相等的时候不交换,或者最大坐标处小于最大值的时候停止交换
if (arr[initialMax] < arr[maxPos]) {
return;
} else {
int temp2 = arr[initialMax];
arr[initialMax] = arr[maxPos];
arr[maxPos] = temp2;
}
}
}