为什么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+ ", ");
            }
        }