選擇排序
package com.zgz;
/**
* 選擇排序
* @author guozhenZhao
* @date 2019年3月31日
*/
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {2,3,6,5,4,1,8,9,5,0};
sort(arr);
print(arr);
}
static void sort(int[] arr) {
//每次遍歷同時找到最大值和最小值所在的位置
for(int i=0; i<arr.length/2; i++) {
//記錄最大值和最小值的位置
int minPos = i;
int maxPos = i;
//更新最大值和最小值的位置
for(int j=i+1; j<=arr.length-1-i; j++) {//每完成一輪減小兩個元素, 注意有等號
if(arr[minPos]>arr[j]) {
minPos = j;
//找到最小值跳出這次循環
continue;
}else if(arr[maxPos]<arr[j]) {
maxPos = j;
}
}
//判斷位置
if(minPos!=i) {
swap(arr, i, minPos);
//進行了交換,原先元素的位置已經發生了變化
if(maxPos==i) {
maxPos=minPos;
}
}
if(maxPos!=arr.length-1-i) {//若是最大值的位置不等於最後一個元素則交換
swap(arr, arr.length-1-i, maxPos);
}
}
}
static void swap(int[] arr, int i, int j) {
int temp = arr[j];
arr[j] = arr[i];
arr[i]= temp;
}
static void print(int[] arr) {
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
}
對數器
package com.zgz;
import java.util.Arrays;
import java.util.Random;
/**
* 對數器
* @author guozhenZhao
* @date 2019年4月1日
*/
public class DataChecker {
static int[] generateRandomArray() {
Random random = new Random();
int[] arr = new int[100];
for(int i=0; i<100; i++) {
arr[i]=random.nextInt(100);
}
return arr;
}
static void check() {
int[] arr = generateRandomArray();
int[] arr1 = new int[arr.length];
System.arraycopy(arr, 0, arr1, 0, arr.length);
Arrays.sort(arr);
SelectionSort.sort(arr1);
boolean flag = true;
for(int i=0; i<arr1.length; i++) {
if(arr[i] != arr1[i]) {
flag = false;
}
}
System.out.println(flag);
}
public static void main(String[] args) {
check();
}
}