首页 > 其他分享 >选择排序

选择排序

时间:2022-10-29 13:34:16浏览次数:49  
标签:arr int printArr 选择 static arr2 arr1 排序

package class01;

import java.util.Arrays;

/**
 * 选择排序
 * 概述:n个数,n次循环(10个数就是10次循环),每次循环找出本轮的最小值,和本轮的第一个位置的数,交换。周而复始。直至该乱序数组有序。
 */
public class Code01_SelectionSort {
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {

            return;
        }
        int N = arr.length;
        for (int i = 0; i < N - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < N; j++) {
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            swap(arr, i, minIndex);
        }
    }

    public static void main(String[] args) {
        int testTimes = 10;
        int maxSize = 15;
        int maxValue = 100;
        boolean flag = true;
        for (int i = 0; i < testTimes; i++) {
            int[] arr = generateRandomArr(maxSize, maxValue);
            int[] arr1 = copyArr(arr);
            int[] arr2 = copyArr(arr);
            Arrays.sort(arr1);
            selectionSort(arr2);
//            printArr(arr);
//            printArr(arr1);
//            printArr(arr2);
            flag = isEquals(arr1, arr2);
            if (!flag) {
                printArr(arr);
                printArr(arr1);
                printArr(arr2);
                break;
            }
        }
        System.out.println(flag ? "Nice!" : "Fucking fucked!");
        int[] arr = generateRandomArr(maxSize, maxValue);
        printArr(arr);
        selectionSort(arr);
        printArr(arr);
    }

    public static boolean isEquals(int[] arr1, int[] arr2) {
        boolean flag = true;
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                flag = false;
                break;
            }
        }
        return flag;
    }

    public static int[] copyArr(int[] arr) {
        int[] arr2 = new int[arr.length];
        int N = arr.length;
        for (int i = 0; i < N; i++) {
            arr2[i] = arr[i];
        }
        return arr2;
    }

    //生成一个长度随机,元素的值也随机的数组。
    public static int[] generateRandomArr(int maxSize, int maxValue) {
        //Math.random(): [0, 1)上的所有小数,等概率返回一个。
        //Math.random() * N:[0, N)上的所有小数,等概率返回一个。
        //(int) Math.random() * N:[0, N)上的所有整数,等概率返回一个。
        int[] arr = new int[(int) (Math.random() * maxSize)];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * maxValue) - (int) (Math.random() * maxValue);
        }
        return arr;
    }

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

    private static void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }

}

 

标签:arr,int,printArr,选择,static,arr2,arr1,排序
From: https://www.cnblogs.com/TheFloorIsNotTooHot/p/16838554.html

相关文章

  • php学习笔记一:开发环境选择
    1.开发工具使用 PhpStorm  对比过PhpStorm、zendstudio、eclipse和vs.php后还是选择了 PhpStorm,相关优缺点可以网上找找。2.部署工具使用xampp3.帮助文档​​http......
  • 选择排序
    #include<stdio.h>#include<string.h>intmain(){inttemp=0;intflag;inta;intt;intarr[10]={};for(inti=0;i<10;i++){ scanf("%d",&a); arr[temp......
  • 【HEOI2016_TJOI2016】排序(线段树分裂&合并)
    线段树分裂&合并入门题。对于每个单调段用一个权值线段树维护。一次操作相当于先对\(l,r\)所在的单调段的权值线段树分裂,然后再合并若干棵的权值线段树。线段树分裂和......
  • 【AGC010E】Rearranging(博弈,图论,拓扑排序)
    考场上想了很久才想到做法,然后考完后又想了很久,加上看了一下一些大佬的博客和Atcoder的官方题解,才完整地证明了整个做法的正确性。综合了一下,在这里详细阐述:首先发现如......
  • 快速排序
    快速排序的思想是这样的,如果要对数组区间[p,r]的数据进行排序,我们先选择其中任意一个数据作为pivot(分支点),一般为区间最后一个元素。然后遍历数组,将小于pivot的数据......
  • C# OrderBy多个字段排序
    C#OrderBy多个字段排序先按Sort字段正序排序,再按CreateDate降序排序,如果三个字段进行排序,我才是再后面再加ThenByDescendingvarresult=_IDbConnection.Query<Query......
  • JS数组对象排序
    原文地址:https://blog.csdn.net/qq_37899792/article/details/88655920利用数组api——>sort来进行排序varperson=[{name:"Rom",age:12},{name:"Bob",age:22},{name:......
  • k8s杂记 - 有选择的翻译
    #k8s杂记-有选择的翻译  ###ResourcecapacitytrackingNodeobjectstrackinformationabouttheNode'sresourcecapacity:forexample,theamountof......
  • Istio 协议选择
    Istio支持代理的协议支持代理任何类型的TCP流量,包括HTTP、HTTPS、gRPC及原始TCP(rawtcp)协议但为了提供额外的能力,比如路由和更加丰富的指标,Istio需要确定更具体的协......
  • datagridview 显示下拉框选择男女
    先看效果:下面公布代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSys......