Java基础之List乱序排列

Java中乱序排序很常见,给定一个数组,要求把数组内元素的顺序随机打乱,然后输出。

有以下几种方法:

1.使用Collections.shuffle实现

List<String> User = new ArrayList<String>();
User.add("a");
User.add("b");
User.add("c");
User.add("d");
User.add("e");
//使用Collections.shuffle实现乱序排序
Collections.shuffle(User);
System.out.println(User);

2.使用交换

int[] arr = {0,1,2,3,4,5,6,7};
int length = arr.length;
for(int i=0;i<length;i++){
    int iRandNum = (int)(Math.random() * length);
    int temp = arr[iRandNum];
    arr[iRandNum] = arr[i];
    arr[i] = temp;
}
//输出
for(int i=0;i<length;i++){
    System.out.print(arr[i] + " ");
}

3.使用randmom

/**
 * 实现乱序排序
 * @param arr
 * @return
 */
public static int []  shuffle(int [] arr) {
    int [] arr2 =new int[arr.length];
    int count = arr.length;
    int cbRandCount = 0;// 索引
    int cbPosition = 0;// 位置
    int k =0;
    int runCount=0;
    do {
        runCount++;
        Random rand = new Random();
        int r = count - cbRandCount;
        cbPosition = rand.nextInt(r);
        arr2[k++] = arr[cbPosition];
        cbRandCount++;
        // 将最后一位数值赋值给已经被使用的cbPosition
        arr[cbPosition] = arr[r - 1];
    } while (cbRandCount < count);
    System.out.println("运算次数:"+runCount);
    return arr2;
}

4.完整代码如下:

public class ListSortTest {
    //演示一下打乱排序
    public static void main(String[] args) {
        List<String> User = new ArrayList<String>();
        User.add("a");
        User.add("b");
        User.add("c");
        User.add("d");
        User.add("e");
        //1.使用Collections.shuffle实现乱序排序
        Collections.shuffle(User);
        System.out.println(User);

        //2.使用交换
        int[] arr = {0,1,2,3,4,5,6,7};
        int length = arr.length;
        for(int i=0;i<length;i++){
            int iRandNum = (int)(Math.random() * length);
            int temp = arr[iRandNum];
            arr[iRandNum] = arr[i];
            arr[i] = temp;
        }
        //输出
        for(int i=0;i<length;i++){
            System.out.println(arr[i] + " ");
        }
        //3.使用random
        shuffle(arr);
    }


    /**
     * 实现乱序排序
     * @param arr
     * @return
     */
    public static int []  shuffle(int [] arr) {
        int [] arr2 =new int[arr.length];
        int count = arr.length;
        int cbRandCount = 0;// 索引
        int cbPosition = 0;// 位置
        int k =0;
        int runCount=0;
        do {
            runCount++;
            Random rand = new Random();
            int r = count - cbRandCount;
            cbPosition = rand.nextInt(r);
            arr2[k++] = arr[cbPosition];
            cbRandCount++;
            // 将最后一位数值赋值给已经被使用的cbPosition
            arr[cbPosition] = arr[r - 1];
        } while (cbRandCount < count);
        System.out.println("运算次数:"+runCount);
        return arr2;
    }
}

5.测试结果如下图:

Guess you like

Origin blog.csdn.net/u012556114/article/details/111659527