package com.sortbasic;
import java.util.Random;
public class InsertionSort {
// 数组
private static int[] arr = null;
// 随机生成数组
// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
public static int[] generateRandomArray(int n, int rangeL, int rangeR){
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = new Random().nextInt(rangeR-rangeL)+rangeL;
}
return arr;
}
// 近乎有序的数组序列
public static int[] generateRandomArrayNearOrder(int n, int swapTimes){
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i] = i;
}
for( int i = 0 ; i < swapTimes ; i ++ ){
int posx = new Random().nextInt(n);
int posy = new Random().nextInt(n);
int temp = arr[posx];
arr[posx] = arr[posy];
arr[posy] = temp;
}
return arr;
}
// 插入排序 将数据插入到已经排好序的数据中
static void insertionSort(int arr[], int n){
for(int i=1;i<n;i++){
//写法1
// for(int j=i; j>0; j--){
// if(arr[j] < arr[j-1]){
// int temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1] = temp;
// }else{
// break;
// }
// }
// 写法2
// for(int j=i; j>0 && arr[j] < arr[j-1]; j--){
// int temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1] = temp;
// }
// 写法3
int e = arr[i];
int j;
for(j=i; j>0 && arr[j-1]>e; j--){
arr[j] = arr[j-1];
}
arr[j] = e;
}
}
// 打印数组
static void printArray(int arr[], int n) {
for(int i=0; i<n; i++){
System.out.println(arr[i]+" ");
}
}
public static void main(String[] args){
int size = 10000;
//arr = generateRandomArray(size, 0, 100000);
arr = generateRandomArrayNearOrder(size, 100);
long startTime = System.currentTimeMillis();
insertionSort(arr,size);
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
//printArray(arr, size);
}
}