785 快排
1、交换顺序的代码出错
int tem = array[i];
array[i] = array[j];
array[j] = tem;//array[j] 写成了array[i],多加注意
2、设置的分界点 应该是 数组中的值,而不是左右边界的索引值
错写成
int x = (left + right) >> 1
正确写法
int x = array[(left + right) >> 1]
787 归并排序
在创建新数组时,只写了 Scanner 输入,并未赋值
for (int i = 0; i < n; i++) {
sc.nextInt();
}
正解
for (int i = 0; i < n; i++) {
array[i] = sc.nextInt();
}
2、忘记写 结束递归条件
if(l >= r) return;
786快速选择算法求出第k小的数
1、跳出递归条件 写错了
应该是 left >= right 写成了 left <= right,这里 为了以后避免此类错误,还是写成 == 比较好
if(left >= right) return array[left];