package com.cisco.www.sort;
import java.util.Arrays;
/**
* 插入排序,时间复杂度和数据状况有关系的,这里就有最好情况,最坏情况和平均情况
*/
public class InsertSort {
public static void insertSort(int[] arr){
if(arr==null||arr.length<2){
return;
}
for(int i = 1 ; i<arr.length;i++){
for(int j = i-1;j>=0&&arr[j]>arr[j+1];j--){
swap(arr,j,j+1);
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//for test
public static int[] generateRandomArray(int size,int value){
//生成长度随机的数组
int[] arr= new int[(int)((size+1)*Math.random())];
for(int i = 0 ;i<arr.length;i++){
//数组中的每个值也是随机的
arr[i]=(int)((value+1)*Math.random())-(int)(value*Math.random());
}
return arr;
}
//大样本测试
public static void main(String[] args){
int testTime = 50000000;
int size =10;
int value=100;
boolean succeed = true;
for(int i= 0 ;i<testTime;i++){
int[] arr1 =generateRandomArray(size,value);
int[] arr2 = copyArray(arr1);
int[] arr3 = copyArray(arr1);
insertSort(arr1);
comparator(arr2);
if(!isEquals(arr1,arr2)){
succeed=false;
break;
}
}
System.out.println(succeed?"Nice!":"Fucking fucked!");
int[] arr = generateRandomArray(size,value);
printArray(arr);
insertSort(arr);
printArray(arr);
}
private static void printArray(int[] arr) {
if(arr==null){
return;
}
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
private static void comparator(int[] arr) {
Arrays.sort(arr);
}
private static int[] copyArray(int[] arr) {
if(arr==null){
return null;
}
int[] res = new int[arr.length];
for(int i = 0 ;i<arr.length;i++){
res[i]=arr[i];
}
return res;
}
public static boolean isEquals(int[] arr1,int[] arr2){
if((arr1==null&&arr2!=null)||(arr1!=null&&arr2==null)){
return false;
}
if(arr1==null&&arr2==null){
return true;
}
if(arr1.length!=arr2.length){
return false;
}
for(int i =0 ;i<arr1.length;i++){
if(arr1[i]!=arr2[i]){
return false;
}
}
return true;
}
}