You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
6.0 KiB

package leo.class01_01;
import leo.util.ArrayUtil;
import java.util.Arrays;
/**
* @author Leo
* @ClassName SelectionSort
* @DATE 2020/11/11 6:24 下午
* @Description 选择排序
*/
public class SelectionSort {
/**
* 功能描述 : 选择排序 O(n²)
* @author Leo
* @date 2020/11/11 6:38 下午
* @param arr
* @return void
*/
public static void selectionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length-1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] > arr[minIndex] ? minIndex : j;
}
swap(arr, i, minIndex);
}
}
/**
* 功能描述 :
* @author Leo
* @date 2020/11/11 9:15 下午
* @param arr
* @return void
*/
public static void selectionSort2(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length-1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
}
public static void selectionSort3(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i+1; j < arr.length; j++) {
minIndex = arr[j] > arr[minIndex] ? minIndex : j;
}
swap(arr, i, minIndex);
}
}
public static void selectionSort4(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
}
}
public static void selectionSort5(int[] arr) {
if (arr.length < 2 || arr == null) {
return;
}
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
public static void selectionSort6(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
public static void selectionSort7(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
public static void selectionSort8(int[] arr) {
if (arr == null || arr.length < 0) {
return;
}
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i] > arr[j ]) {
swap(arr, i, j );
}
}
}
}
public static void selectionSort9(int[] arr) {
if (arr == null || arr.length <=1) {
return;
}
for (int i = 0; i < arr.length-1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
public static void selectionSort10(int[] arr){
if (arr.length <= 0 || arr == null) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
public static void selectionSort11(int[] arr) {
if (arr.length == 0 || arr == null) {
return;
}
for (int i = 0; i < arr.length-1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
public static void selectionSort12(int[] arr) {
if (arr.length == 0 || arr == null) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr,i,j);
}
}
}
}
/**
* 功能描述 : 交换
* @author Leo
* @date 2020/11/11 6:34 下午
* @param arr
* @param i
* @param j
* @return void
*/
private static void swap(int[] arr, int i, int j) {
if (arr == null ||
arr.length <= i ||
arr.length <= j ||
i == j) {
return;
}
arr[j] = arr[j] ^ arr[i];
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[j] ^ arr[i];
}
public static void main(String[] args){
int maxSize = 100;
int range = 50;
int testOfTime = 1000;
boolean succeed = true;
for (int i = 0; i < testOfTime; i++) {
int[] arr = ArrayUtil.randomArray(maxSize, range);
int[] anotherArr = ArrayUtil.copyArray(arr);
selectionSort12(arr);
Arrays.sort(anotherArr);
if (!ArrayUtil.isEqual(arr, anotherArr)) {
succeed = false;
ArrayUtil.printArr(arr, "arr");
ArrayUtil.printArr(anotherArr, "anotherArr");
break;
}
}
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
}
}