SelectionSort 算法用零替换所有元素

SelectionSort algorithm replace all the elements with zeros

主要class:

import java.util.Random;

public class Main{
    public static void main(String args[]){
        Main m = new Main();
        m.run();
    }
    
    private void run(){
        Random r = new Random();
        int[] array = new int[50];
        
        for(int el:array){
            el = r.nextInt(50);
            System.out.print(el + " ");
        }
        System.out.println("");
        
        long start = System.currentTimeMillis();
        SelectionSort.run(array,50);
        long finish = System.currentTimeMillis();
        long timeElapsed = finish - start;
        
        for(int el:array){
            System.out.print(el + " ");
        }
        System.out.println("");
        System.out.println(timeElapsed);
    }
}

选择排序class:

public class SelectionSort{
    public static void run(int[] array, int size){
        int m = 0;
        int temp = 0;
        for (int i=0; i<size-1; ++i){
            m = i;
            for (int j=i+1; j<size; ++j){
                if (array[m]>array[j]){
                    m = j;
                }
            }
            temp = array[i];
            array[i] = array[m];
            array[m] = temp;
        }
    }
}

输出:

$ java Main
35 19 29 0 42 42 21 33 9 2 48 20 5 40 17 37 35 24 32 29 2 1 32 30 32 17 23 13 5 8 32 34 12 10 29 18 10 0 12 49 8 11 10 1 26 9 12 14 18 25 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1

为什么全是零?我究竟做错了什么?真的不知道会是什么...我多次编辑我的代码,仍然没有解决方案...我是新手,你能帮帮我吗?

我知道java有排序的方法,但我正在做一些练习

int[] array = new int[10];
int i = 0;

for (int el : array) {
    el = r.nextInt(50);
    array[i++] = el;
    System.out.print(el + " ");
}

您忘记填充数组了。


public class Foo {

    public static void main(String args[]) {
        Foo m = new Foo();
        m.run();
    }

    private void run() {
        int[] arr = createRandomArray(50);
        System.out.println(Arrays.toString(arr));

        long start = System.currentTimeMillis();
        new SelectionSort().accept(arr);
        long time = System.currentTimeMillis() - start;

        System.out.println(Arrays.toString(arr));
        System.out.println("time (ms): " + time);
    }

    private static int[] createRandomArray(int length) {
        Random random = new Random();
        int[] arr = new int[length];

        for (int i = 0; i < arr.length; i++)
            arr[i] = random.nextInt(50);

        return arr;
    }
}

final class SelectionSort implements Consumer<int[]> {

    @Override
    public void accept(int[] arr) {
        for (int i = 0, j = i; i < arr.length - 1; i++, j = i) {
            for (int k = i + 1; k < arr.length; k++)
                j = arr[k] < arr[j] ? k : j;

            swap(arr, i, j);
        }
    }

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