【问题标题】:Why does this sort in Java not work? [closed]为什么Java中的这种排序不起作用? [关闭]
【发布时间】:2017-08-25 09:59:27
【问题描述】:

我正在尝试实现一个简短的排序算法,但它根本不起作用。有更多编程经验的人有任何提示吗?数组未排序,最终打印中多次出现多个值。为什么?

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

【问题讨论】:

  • “不起作用”是什么意思?尝试更明确。您是否尝试过使用调试器?
  • 您的排序逻辑已关闭。这看起来有点像冒泡排序,但它只有 2 步而不是 3 步。
  • 此代码也无法编译。
  • 如果您告诉我们您实际得到的结果会很有帮助。我看到的一个问题是您只通过数组进行一次传递,而冒泡排序(看起来像这样)需要嵌套循环。

标签: java arrays function sorting main


【解决方案1】:

您的交换已损坏。在你调用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;

【讨论】:

    【解决方案2】:

    这里:

    array[i+1] = array[i];
    array[i] = array[i+1];
    

    您必须将值存储在临时变量中,因为在第二行中您会得到相同的值。

    试试这个

    int tmp = array[i];
    array[i] = array[i+1];
    array[i+1] = tmp;
    

    【讨论】:

      【解决方案3】:

      几点。看看下面是否有帮助:

      1. 应该很少有编译问题 - 缺少分号,在数组上尝试 length() 比长度。
        2。最后,您只需将 i 从 0 打印到数组长度。我想你想打印数组[i]。
        3. 有多种排序算法,你可以通过谷歌搜索找到。
        4。如果您选择冒泡排序,请尝试使用两个循环,一个外部直到数组长度,一个内部直到(数组长度元素已经排序)。在里面你使用 temp 变量进行比较。

                    temp = array[j];  
                    array[j] = array[j+1];  
                    array[j+1] = temp;   
        

      【讨论】:

        【解决方案4】:

        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;
           }
         }
        

        【讨论】:

          【解决方案5】:

          你需要添加临时变量并在每次交换后返回数组的开头

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

          【讨论】:

            猜你喜欢
            • 2017-04-28
            • 2021-11-13
            • 1970-01-01
            • 1970-01-01
            • 2021-07-06
            • 1970-01-01
            • 2019-10-11
            • 2019-07-31
            • 2017-12-13
            相关资源
            最近更新 更多