选择按降序排序-JAVA
我实现了一个选择排序来对随机整数数组进行排序。我希望用户在升序或降序之间进行选择。升序排序可以完美地工作,而降序排序则不行。我的选择排序如下所示:选择按降序排序-JAVA,java,arrays,sorting,selection,Java,Arrays,Sorting,Selection,我实现了一个选择排序来对随机整数数组进行排序。我希望用户在升序或降序之间进行选择。升序排序可以完美地工作,而降序排序则不行。我的选择排序如下所示: public String selection(int[] array,int num,String order) { String output = ""; int min; // This is the descending selection sort if (order == "desc") {
public String selection(int[] array,int num,String order) {
String output = "";
int min;
// This is the descending selection sort
if (order == "desc") {
for (int i = num - 1; i >= 0; i--) {
// Assume first element is min
min = i;
for (int j = i + 1; j < num; j++) {
if (array[j] < array[min]) {
min = j;
}
}
if (min != i) {
final int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
output = output + Integer.toString(array[i]) + "\n";
}
} // This is the ascending selection sort
else {
for (int i = 0; i < num; i++) {
// Assume first element is min
min = i;
for (int j = i + 1; j < num; j++) {
if (array[j] < array[min]) {
min = j;
}
}
if (min != i) {
final int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
output = output + Integer.toString(array[i]) + "\n";
}
}
return(output.trim());
}
公共字符串选择(int[]数组,int num,字符串顺序){
字符串输出=”;
int-min;
//这是降序选择排序
如果(顺序=“描述”){
对于(int i=num-1;i>=0;i--){
//假设第一个元素是min
min=i;
对于(int j=i+1;j
我看到了一些与我类似的问题,尽管我看到的问题中没有一个问题的选择排序是这样设置的,因此我无法实现它们的解决方案。首先,
if
块应该与minPosition
和maxPosition
进行比较,而不是I
。其次,如果您同时选择了最小值
和最大值
,则内部for循环应停止在a.length-i
,而不是a.length
(因为顶部的i
元素也已排序)。这两种方法都可以作为升序算法
public static void SortAscending(int[] a){
for(int i = 0; i < a.length; i++){
int maxPosition=i;
int minPosition=i;
for(int j = i+1; j < a.length - i; j++){
if(a[j] < a[minPosition]){
minPosition = j;
}
if(a[j] > a[maxPosition]){
maxPosition = j;
}
}
/*
if(i < a.length/2-1)
*/
swap(a,maxPosition,i);
swap(a,minPosition,a.length-i-1);
}
}
公共静态无效排序(int[]a){
for(int i=0;ia[maxPosition]){
maxPosition=j;
}
}
/*
如果(i
要切换到降序,只需添加一行即可
public static void SortDescending(int[] a){
for(int i = 0; i < a.length; i++){
int maxPosition=i;
int minPosition=i;
for(int j = i+1; j < a.length - i; j++){
if(a[j] < a[minPosition]){
minPosition = j;
}
if(a[j] > a[maxPosition]){
maxPosition = j;
}
}
/*
if(i < a.length/2-1)
*/
swap(a,minPosition,maxPosition); // <-- this line
swap(a,maxPosition,i);
swap(a,minPosition,a.length-i-1);
}
}
publicstaticvoidsortdescending(int[]a){
for(int i=0;ia[maxPosition]){
maxPosition=j;
}
}
/*
如果(i swap(a,minPosition,maxPosition);//如果最小升序排序有效,可能使用相同的循环结构并更改逻辑以测试最大值。降序for循环中的逻辑似乎不正确。array.sort(array)或array.sort(array,Collections.reverseOrder());数组有一个a长度,array.length,所以不要传入。它从“==”开始比较字符串是错误的。请改用equals方法。然后阅读并清楚地描述确切的问题。“不工作”不是工作问题描述。