• 冒泡排序(java可直接跑,算法思想等小儿科不多说直接上代码)


    import java.util.Arrays;

    /**
    *冒泡排序:时间复杂度O(N^2),空间复杂度O(1),稳定的排序
    * 每趟确定一个元素的位置,所以需要arr.length趟排序,
    */
    public class BubbleSort {
    public static void bubbleSort(int[] arr){
    if(arr==null||arr.length<2){//如果数组为空,或者数组长度小于2直接返回数组
    return ;
    }
    //需要进行arr.length-1趟的排序
    for(int i =arr.length ; i>0 ; i--){
    for(int j = 1 ; j < i ; j++){
    //如果前面一个元素大于后面一个元素的话,就将大的元素向后沉
    if(arr[j-1]>arr[j]){
    swap(arr,j-1,j);
    }
    }
    }
    }

    private static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp ;
    }
    //test
    public static int[] generateRandomArray(int size,int value){
    //数组的长度是0到100之间
    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;
    }
    //test
    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 = 1000000;
    int size = 100;
    int value = 100 ;
    boolean succeed = true;
    //测试次数为testTime次
    for(int i = 0 ;i<testTime;i++){
    //生成一个长度为0到100之间的随机数组
    int[] arr1 = generateRandomArray(size,value);
    int[] arr2 = copyArray(arr1);
    bubbleSort(arr1);
    comparator(arr2);
    if(!isEqual(arr1,arr2)){
    succeed=false;
    break;
    }
    }
    System.out.println(succeed?"Nice!":"Fucking fucked!");
    //最后再做一个检验
    int[] arr= generateRandomArray(size,value);
    printArray(arr);
    bubbleSort(arr);
    printArray(arr);
    }

    private static void printArray(int[] arr) {
    for(int i = 0 ; i < arr.length ; i++){
    System.out.print(arr[i]+" ");
    }
    System.out.println();
    }

    private 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;
    }

    private static void comparator(int[] arr) {
    Arrays.sort(arr);
    }

    }
  • 相关阅读:
    linux基础
    sublime、Typora
    Windows cmd命令
    idea打包java可执行jar包
    idea常用快捷键
    Linux入门学习笔记1:VI常用命令
    442. Find All Duplicates in an Array
    566. Reshape the Matrix
    766. Toeplitz Matrix
    561. Array Partition I
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/11029273.html
Copyright © 2020-2023  润新知