微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SelectionSort算法将所有元素替换为零

如何解决SelectionSort算法将所有元素替换为零

主类:

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

SelectionSort类:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。