【问题标题】:How to "swap" two values in an array?如何“交换”数组中的两个值?
【发布时间】:2018-11-25 12:31:33
【问题描述】:

我正在尝试编写选择排序算法。作为算法的一部分,我需要切换数组中的 2 个值,我尝试如下:array[min] = array[i]; array[i] = array[min]; 但我相信这不会起作用,因为array[min] 已经是=array[i]。那么我该如何进行这种交换呢?下面是我的代码。

static int[] array = {3, 2, 1, 4, 5, 6};

static int n = 5;
static int temp;

        for (int i = 0; i<=5; i++) {
        int min = 0;

        for (int j = i+1; j<=n; j++) {
            //System.out.println(j);

            if (array[j]<array[min]) {
                min = j;
            }

            if (min != i) {
                array[min] = array[i];
                array[i] = array[min];
            }
        }
    }

【问题讨论】:

    标签: java selection


    【解决方案1】:

    需要一个临时内存位置来存储值。

    temp = array[min]    
    array[min] = array[i]    
    array[i] = temp
    

    【讨论】:

      【解决方案2】:

      您也可以在不使用临时变量的情况下交换值。示例代码如下:

      举个例子:

      array[min] = 10;
      array[i] = 5;
      

      现在,

      array[min] = array[min] + array[i]; // array[min] = 15
      array[i] = array[min] - array[i]; // array[i] = 10
      array[min] = array[min] - array[i]; // array[min] = 5
      

      这里可以避免使用临时变量。

      【讨论】:

        【解决方案3】:

        有多种交换方式:

        • 带有第三个临时变量

          temp = array[min];
          array[min] = array[i];
          array[i] = temp;
          
        • 没有临时变量(使用加法)

          array[min] = array[min] + array[i];
          array[i] = array[min] - array[i];
          array[min] = array[min] - array[i];
          
        • 没有临时变量(使用位运算)

          array[min] ^= array[i];
          array[i] ^= array[min];
          array[min] = array[i];
          
          这里^ 是按位计算的XOR operator

        【讨论】:

          【解决方案4】:

          这看起来很有趣! 任何大 0 约束?内存限制?如果不是,我会尝试这个家伙的简单冒泡排序与交换

          public static void bubbleSort(int[] Database) {
          
                  for (int i = arraySize -1; i > 0; i--) {
          
                      for (int j = 0; j < i; j++) {
          
                          if(Database[j] > Database[j+1]){
          
                              Swap(Database,j,j+1);
                              //ArrayPartition.DisplayTheArray(i, j)
          
                          }
                          Main.PrintHorizontalArray(i, j);
          
                      }
          
                  //  Main.PrintHorizontalArray(i, -1);
                  }
          
              }
          
              public static void Swap(int[] database, int j, int i) {
                  int temp = database[j];
                  database[j] = database[i];
                  database[i] = temp;
          
          }
          

          我对这个答案的评分为零,因为我的大学 Java 课程中没有涉及排序,我在 Google 上搜索了它来学习它。 a great starting point to learn data structure and sorting.

          还有一本很棒的免费 Java 7 书籍涵盖了这些

          javanotes

          我查找了我的 Java 7 类,我在这里使用了这段代码

          public int[] selectionSort(int[] inarray) {
          
          //int[] data = Arrays.copyOf(inarray, inarray.length);
          int temp;
          int n=inarray.length;
          for (int i=0; i<inarray.length; i++){
          int k=i;
          for (int j=i+1;j < n;j++)
          if (inarray[j]<inarray[k])
          k=j;
          temp = inarray[i];
          inarray[i] = inarray[k];
          inarray[k] = temp;
          }
          return data;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-05-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多