java - 为什么我的排序代码不能正常工作?
问题描述
我有一个整数数组,我需要:前半部分升序排序,另一半降序排序。我不知道这不能按我的意愿工作的原因是什么。
for(i = 0 ; i < array.length/2 - 1 ; i++){
ok = false;
for(j = i ; j < array.length/2 - 1 ; j++){
if(array[j]>array[j+1]){
tempValue = array[j];
array[j] = array[j+1];
array[j+1] = tempValue;
ok = true;
}
}
if(ok == false)
break;
}
for(i = array.length/2 ; i < array.length - 1 ; i++){
ok = false;
for(j = i ; j < array.length - 1; j++){
if(array[j]<array[j+1]){
tempValue = array[j];
array[j] = array[j+1];
array[j+1] = tempValue;
ok = false;
}
}
if(ok == false)
break;
}
Expected result: [4,1,2,5,6,8,7,9] - > [1,2,4,5,9,8,7,6].
Result in my code: [1,2,4,5,8,7,9,6].
解决方案
您的代码中有多个错误。主要是ok=false
当您对另一半数组进行排序时。
下面的代码工作正常。
public class MyClass {
public static void main(String args[]) {
int i,j,tempValue;
int array[]= {4,1,2,5,3,6,8,7,10,9};
boolean ok=true;
for(i = 0 ; i < array.length/2 ; i++){
ok = false;
for(j = i ; j < array.length/2 ; j++){
if(array[j]>array[j+1]){
tempValue = array[j];
array[j] = array[j+1];
array[j+1] = tempValue;
ok = true;
}
}
if(ok == false)
break;
}
for(i = array.length/2 ; i < array.length ; i++){
ok = false;
for(j = array.length/2 ; j < array.length - 1; j++){
if(array[j]<array[j+1]){
tempValue = array[j];
array[j] = array[j+1];
array[j+1] = tempValue;
ok = true;
}
}
if(ok == false)
break;
}
for(i = 0 ; i < array.length ; i++){
System.out.print(array[i]);
}
}
}
推荐阅读
- azure-devops - 用于访问项目队列的 VSTS API?
- sql-server - 按单行记录分组显示
- django-views - Django:在 ClassBased 视图中将 min 和 max 属性传递给 datepicker
- rpmbuild - 当源 tar 目录与 name-version 不对应时使用 rpmbuild
- html - Css - style input checkbox with js interaction
- java - 第一个连接org.hibernate.exception.JDBCConnectionException:无法获取JDBC Connection
- apache-kafka - 向 kafka 流状态存储中断添加名称
- excel - 从某个索引处的单元格中提取子字符串(不同的行长,多行)
- php - 无法验证 Slack 对话框字段。response_url 调用总是失败
- c# - 如何在 c# 中显示 sldocument 的“保存”对话框?