这个快速排序应该将"v [left] ... v [right]排序为增加顺序"; K&R(第二版)从C编程语言中复制(不带注释):
void qsort(int v[], int left, int right)
{
int i, last;
void swap(int v[], int i, int j);
if (left >= right)
return;
swap(v, left, (left + right) / 2);
last = left;
for (i = left+1; i <= right; i++)
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last-1);
qsort(v, last+1, right);
}
Run Code Online (Sandbox Code Playgroud)
我觉得有一个错误
(left + right) / 2
Run Code Online (Sandbox Code Playgroud)
假设left = INT_MAX - 1且right = INT_MAX.由于整数溢出,这不会导致未定义的行为吗?
我跑了这个程序,然后输出
...
65088
65089
65090
然后它停了下来.Windows 7称a.exe停止工作.这是代码:
#include <stdio.h>
void go(void);
main()
{
go();
}
void go(void)
{
static int i = 0;
printf("%d\n", i++);
go();
}
Run Code Online (Sandbox Code Playgroud)
我认为这个程序应该由于递归而无限期地打印数字,但它会在65090停止!C代码是用gcc编译的.有任何想法吗?
对于下面的 iframe,Safari 从不调用 onload 函数,也不会在 iframe 中显示任何内容。我测试过的所有其他浏览器都会调用 onload 并显示默认错误网页。
<html>
<body>
<iframe src="http://www.asdkjhjhkjhkjhjhjhfhkjhsdflkjahdsjfhasf.com"
onload="alert('iframe loaded');">
</iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如果这个问题没有解决方案,那么我需要找到一种方法来检测iframe是否加载失败。
出于某种原因,从main方法调用时,我的方法"bishops"运行得比从静态初始化块运行得快得多.这是正常的,还是一个错误?
public class Magic
{
public static void main(String[] args)
{
bishops();
}
public static void bishops()
{
//PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("bishops.txt")));
BISHOP_SHIFTS = new int[64];
BISHOP_COMBOS = new long[64][];
for (int square = 0; square < 64; square++) {System.out.println("bbb " + square);
int NUMBER = bitCount(BISHOP_ATTACKS[square]);
BISHOP_SHIFTS[square] = 64 - NUMBER;
long x = BISHOP_ATTACKS[square];
long[] MAPS = new long[NUMBER];
for (int n = 0; n < NUMBER; n++) {
int i = bitScan(x);
MAPS[n] = …Run Code Online (Sandbox Code Playgroud) 编译这个程序时,我在循环中得到20个错误; 以下只是一个片段:
public static long[] bishopsMasks()
{
long[] masks = new long[64];
for (int j = 0; j < 8; j++)
{
for (int i = 0; i < 8; i++)
{
long x = 0L;
for (int a = i + 1, int b = j + 1; a < 7 && b < 7; a++, b++)
x |= bit(a, b);
for (int a = i + 1, int b = j - 1; a < 7 && b …Run Code Online (Sandbox Code Playgroud)