package Code01;
import com.sun.xml.internal.bind.v2.runtime.SwaRefAdapter;
import java.util.Scanner;
public class factorial {
// 求1~N的阶乘之和 1!+2!+3+ ... + N!
public static void fac_one(int m){
int rec = 1;
int sum = 0;
for(int j=1;j<=m;j++){
rec = rec*j;
sum += rec;
}
System.out.print(sum);
}
// 交换函数
public static void swap(int[] arr, int a, int b){
int tmp = arr[b];
arr[b] = arr[a];
arr[a] = tmp;
}
// 选择排序
public static void choiceSort(int[] arr){
int N = arr.length;
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
if(arr[j] < arr[i]){
swap(arr, j,i);
}
}
}
}
// 冒泡排序
public static void popSort(int[] arr){
int N = arr.length;
while(N>1){
for(int i=1;i<N;i++){
if(arr[i-1] > arr[i]){
swap(arr, i-1, i);
}
}
N--;
}
}
// 插入排序
public static void insertSort(int[] arr){
if(arr==null || arr.length<2){
return;
}
//0~n-1
int N = arr.length;
for(int end=1;end < N;end++){
int newNumIndex = end;
while(newNumIndex-1 >=0 && arr[newNumIndex-1] > arr[newNumIndex]){
swap(arr, newNumIndex-1, newNumIndex);
newNumIndex--;
}
}
}
// 优化插入排序
public static void optinsertSort(int[] arr){
if(arr==null || arr.length<2){
return;
}
int N = arr.length;
for(int end=1; end<N; end++){
for(int pre = end-1; pre>=0 && arr[pre]>arr[pre+1]; pre-- ){
swap(arr, pre, pre+1);
}
}
}
// 打印数组
public static void printArray(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
// 对数器 随机生成 生成长度在[0,maxLen-1]范围内, 值在[0,maxValue-1]的数组
public static int [] lenRandomValueRandom(int maxLen, int maxValue){
int len = (int)(Math.random()*maxLen);
int[] ans = new int[len];
for(int i=0; i<len; i++){
ans[i] = (int)(Math.random()*maxValue);
}
return ans;
}
public static int[] copyArray(int[] arr){
int[] ans = new int[arr.length];
for(int i=0;i<arr.length;i++){
ans[i] = arr[i];
}
return ans;
}
public static boolean isSorted(int[] arr){
if(arr.length<2){
return true;
}
int max = arr[0];
for(int i=1;i<arr.length;i++){
if(max > arr[i]){
return false;
}
max = Math.max(max,arr[i]);
}
return true;
}
public static void main(String[] args){
int maxLen = 5;
int maxValue = 1000;
int testTimes = 10000;
for(int i=0;i<testTimes;i++){
int[] arr1 = lenRandomValueRandom(maxLen, maxValue);
int[] arr2 = copyArray(arr1);
choiceSort(arr1);
if(!isSorted(arr1)){
System.out.println("排序有误");
}
}
}
}
好用, 要用熟练