为什么Java中的这种排序不起作用?
我试图实现一个简短的排序算法,但它根本不起作用。有编程经验的人有什么建议吗?数组未排序,在结束打印时多次出现多个值。为什么?为什么Java中的这种排序不起作用?,java,arrays,function,sorting,main,Java,Arrays,Function,Sorting,Main,我试图实现一个简短的排序算法,但它根本不起作用。有编程经验的人有什么建议吗?数组未排序,在结束打印时多次出现多个值。为什么? public static void main(String[] args) { // Sort the data int[] array = {1,5,2,3,6,2,29,-2,23,3}; for (int i = 0; i<array.length-1; i++) { if (array[i] > array
public static void main(String[] args) {
// Sort the data
int[] array = {1,5,2,3,6,2,29,-2,23,3};
for (int i = 0; i<array.length-1; i++) {
if (array[i] > array[i+1]) {
array[i+1] = array[i];
array[i] = array[i+1];
}
}
// Print the data.
for (int i = 0; i<array.length; i++) {
System.out.print(i+ ", ");
}
}
publicstaticvoidmain(字符串[]args){
//对数据进行排序
int[]数组={1,5,2,3,6,2,29,-2,23,3};
对于(int i=0;i数组[i+1]){
数组[i+1]=数组[i];
数组[i]=数组[i+1];
}
}
//打印数据。
对于(int i=0;i您的交换被中断。在调用array[i+1]=array[i];
之后,array[i]=array[i+1];
什么也不做,因为array[i+1]
被覆盖。您需要将该值存储在一个临时变量中:
int temp = array[i+1];
array[i+1] = array[i];
array[i] = temp;
在这里:
您必须将该值存储在临时变量中,因为在第二行中您会得到相同的值
试试这个
int tmp = array[i];
array[i] = array[i+1];
array[i+1] = tmp;
几点。看看下面是否有帮助:
应该没有什么编译问题-缺少分号,在数组上尝试length(),而不是length。
2。最后,您只需将i从0打印到数组长度。我想您想要打印数组[i]
3.通过谷歌搜索可以找到多种排序算法。
4.如果选择冒泡排序,请尝试使用两个循环,一个是数组的外部till长度,另一个是内部till(数组长度元素已排序)。在内部使用temp变量进行比较
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
1如果要交换两个元素,请使用临时变量
public void swap(int[] nums,int i,int j)
{ int tmp=nums][i];
nums[i]=nums[j];
nums[j]=tmp;
}
2这种显示方式无法对数据进行排序,以下是我的数据排序方式:
public void insertionSort(int nums[])
{
int j;
for(int i=1,i<nums.length-1;i++){
int tmp=nums[i];
for(j=i;j>0&&nums[j]<nums[j-1];j--)
nums[j]=nums[j-1];
nums[j]=tmp;
}
}
public void insertionSort(int nums[])
{
int j;
对于(inti=1,i0&&nums[j]您需要添加临时变量,并在每次交换后返回到数组的开头
public static void main(String[] args) {
// Sort the data
int[] array = {1,5,2,3,6,2,29,-2,23,3};
int temp;
for (int i = 0; i<array.length-1; i++) {
if (array[i] > array[i+1]) {
temp=array[i+1]; //temporel
array[i+1] = array[i];
array[i] = temp;
i=0; //to return to the start of the array
}
}
// Print the data.
for (int i = 0; i<array.length; i++) {
System.out.print(i+ ", ");
}
}
publicstaticvoidmain(字符串[]args){
//对数据进行排序
int[]数组={1,5,2,3,6,2,29,-2,23,3};
内部温度;
对于(int i=0;i数组[i+1]){
temp=数组[i+1];//临时
数组[i+1]=数组[i];
数组[i]=温度;
i=0;//返回数组的开头
}
}
//打印数据。
对于(int i=0;i)你说的“不工作”是什么意思?尽量更明确。您是否尝试过使用调试器?您的排序逻辑已关闭。这看起来有点像冒泡排序,但它只有2个步骤,而不是3个步骤。此外,此代码不可编译。如果您告诉我们实际得到的结果,这将很有帮助。我看到的一个问题是,您只对数组进行了一次遍历,而冒泡排序(看起来像)需要一个嵌套循环。
public static void main(String[] args) {
// Sort the data
int[] array = {1,5,2,3,6,2,29,-2,23,3};
int temp;
for (int i = 0; i<array.length-1; i++) {
if (array[i] > array[i+1]) {
temp=array[i+1]; //temporel
array[i+1] = array[i];
array[i] = temp;
i=0; //to return to the start of the array
}
}
// Print the data.
for (int i = 0; i<array.length; i++) {
System.out.print(i+ ", ");
}
}