java - 如何实现降序选择排序
问题描述
我必须创建的方法应该将整数数组作为参数,并返回整数数组,其内容按降序排序——从大到小。注意 - 此方法的实现中不应使用任何库。
我尝试使用常规选择排序并在最后使用交换,但刚刚发生语法错误:
public static int[] reverseSelectionSort(int[] arrayToBeSorted) {
// implementation of Task 3 goes here
for(int i = 0; i < arrayToBeSorted.length; i++){
int maxPosition=i;
int minPosition=i;
for(int j = i+1; j < arrayToBeSorted.length - i; j++){
if(arrayToBeSorted[j] < arrayToBeSorted[minPosition]){
minPosition = j;
}
if(arrayToBeSorted[j] > arrayToBeSorted[maxPosition]){
maxPosition = j;
}
}
swap(arrayToBeSorted,minPosition,maxPosition);
swap(arrayToBeSorted,maxPosition,i);
swap(arrayToBeSorted,minPosition,arrayToBeSorted.length-i-1);
}
return arrayToBeSorted; // change this to return the sorted array
}
public static void main(String[] args) {
int[] array2 = {3, 6, 8, 3, 5, 7, 1};
int[] sorted = reverseSelectionSort(array2);
System.out.print("task: [");
for (int i = 0; i < sorted.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(sorted[i]);
}
System.out.println("]");
}
如果您在数组 [3, 6, 8, 3, 5, 7, 1] 上调用方法,则该方法应返回数组 [8, 7, 6, 5, 3, 3, 1]。
解决方案
一旦您将 swap 的实现添加到您的代码中(并将其全部放在一个类中),它就会产生您想要的输出。也许你认为 swap 是一个 java uitl,它是用于 Collections 的,但数组不是 Collection。因此,以下内容几乎没有变化:
public class soSelect{ //embed in class, added
public static int[] reverseSelectionSort(int[] arrayToBeSorted) {
// implementation of Task 3 goes here
for(int i = 0; i < arrayToBeSorted.length; i++){
int maxPosition=i;
int minPosition=i;
for(int j = i+1; j < arrayToBeSorted.length - i; j++){
if(arrayToBeSorted[j] < arrayToBeSorted[minPosition]){
minPosition = j;
}
if(arrayToBeSorted[j] > arrayToBeSorted[maxPosition]){
maxPosition = j;
}
}
swap(arrayToBeSorted,minPosition,maxPosition);
swap(arrayToBeSorted,maxPosition,i);
swap(arrayToBeSorted,minPosition,arrayToBeSorted.length-i-1);
}
return arrayToBeSorted; // change this to return the sorted array
}
public static void swap(int[] a, int i, int j){ //had to implement it
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
int[] array2 = {3, 6, 8, 3, 5, 7, 1};
int[] sorted = reverseSelectionSort(array2);
System.out.print("task: [");
for (int i = 0; i < sorted.length; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(sorted[i]);
}
System.out.println("]");
}
}//added outer brace
我在 java doodle 中运行它并打印:
task: [8, 7, 6, 5, 3, 3, 1]
除此之外,我没有进行测试,但这至少应该让你摆脱困境,或者充其量是完成。当然,您可以与上述评论指向您的实现进行比较。
推荐阅读
- sql - Oracle SQL:使用条件将多列合并为 1
- python - 非文字导入 importlib.import_module() 中不受信任的用户输入警告
- javascript - 我可以测试一个组件
- ssl-certificate - 如何使用 Arduino MKR1000 连接到 Telegram Bot?
- json - 如何使 Array 和 Dictionary 类型递归地符合自定义 JSONType 协议
- node.js - 你如何在 Ubuntu 上安装`npm`?
- .net - Blazor WebAssembly 发布到 AWS Beanstalk
- forms - Vue 3 表单验证子组件
- c# - 如何旋转我单击的立方体而不是同时旋转所有立方体?
- matlab - 如何在 MATLAB 上使用 edfread 修复“......的'StartDate'值必须遵循 dd.MM.yy 格式”?