java - 快速排序分区功能

标签 java algorithm sorting quicksort

想请教一个关于quick sort partition function()的问题。如果我替换语句

int pivot = arr[(left + right) / 2];

int pivot = arr[left+(right-left)>>1];

当数组中有重复元素时,该算法不起作用。为什么?谢谢。

int partition(int arr[], int left, int right) 

{ 

      int i = left, j = right; 

      int tmp; 

      int pivot = arr[(left + right) / 2]; **********        

      while (i <= j) { 

            while (arr[i] < pivot)  i++; 
            while (arr[j] > pivot)  j--; 

            if (i <= j) { 
                  tmp = arr[i]; 
                  arr[i] = arr[j];
                  arr[j] = tmp; 
                  i++; 
                  j--; 
            } 
      }     

      return i; 
} 

最佳答案

问题是运算符的优先级。

您使用的 3 的顺序如下:

  1. 乘法
  2. 添加剂
  3. 转变

发生的事情是,left+(right-left)>>1 被当作 (left+(right-left))>>1,这不相等,而只是 right >> 1right/2

您可以在此处查看优先级:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

关于java - 快速排序分区功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432008/

相关文章:

iPhone如何使用默认的UIImagePicker选择最新拍摄的图像

java - 通过 Java 的 Ctrl+C 信号?

java - 将 Keycloak 与 pgbouncer 一起使用

Java并发唤醒线程

algorithm - 解决经典 0-1 背包的遗传算法和动态规划之间的最佳方法是什么?

algorithm - 需要一些帮助来理解搜索算法(A*、IDA*、DFS、BFS、IDDFS 等)

algorithm - 位和字节 : Store a shuffle instruction

java - 向传入的广播添加标志

javascript - 如何使用 js 数组,查找和分组项目?

php - 使用 ORDER BY 或 PHP 排序函数对 MySQL 查询进行排序