headfirst插入排序

来源:互联网 发布:java bigdecimal最大值 编辑:程序博客网 时间:2024/06/01 07:29
import java.util.Arrays;public class code_01_InsertionSort {    public static void insertionSort(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);            }        }    }    public static void swap(int[] arr,int i, int j){        arr[i] = arr[i] ^ arr[j];        arr[j] = arr[i] ^ arr[j];        arr[i] = arr[i] ^ arr[j];    }    public static void comparator(int[] arr){        Arrays.sort(arr);    }    public static int[] generateRandomArray(int maxSize, int maxValue){        int[] arr = new int[(int)((maxSize + 1) * Math.random())];        for (int i = 0; i < arr.length; i++){            arr[i] = (int)((maxValue + 1) * Math.random() - (int)(maxValue * Math.random()));        }        return arr;    }    public static boolean isEqual(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;    }    public 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();    }    public 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 void main(String[] args){        int testTime = 500000;        int maxSize = 100;        int maxValue = 100;        boolean succeeed = true;        for (int i = 0; i < testTime; i++){            int[] arr1 = generateRandomArray(maxSize, maxValue);            int[] arr2 = copyArray(arr1);            insertionSort(arr1);            comparator(arr2);            if (!isEqual(arr1, arr2)){                succeeed = false;                break;            }        }        System.out.println(succeeed ? "nice" : "fucker");        int[] arr = generateRandomArray(maxSize, maxValue);        printArray(arr);        insertionSort(arr);        printArray(arr);     }}

时间复杂度O(n^2),额外空间复杂度O(1);可以是稳定的,在最优情况下,前面都已经
排好序了,那么每次插入只需要比较一次,最优为O(n)。

原创粉丝点击