如何解决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 举报,一经查实,本站将立刻删除。