level 8
function integer partition (var array integer arr of, integer head, integer tail)
BEGIN
integer i;
integer flag;
integer tmp;
flag=head-1;
FOR (i,head,to, tail-1) DO
BEGIN
IF arr[i]<=arr[tail] then
BEGIN
inc(flag);
tmp = arr[i];
arr[i] = arr[flag];
arr[flag] = tmp;
/* arr[flag] = arr[i] xor arr[flag];
arr[i] = arr[i] xor arr[flag];
arr[flag] = arr[i] xor arr[flag]; */
END;
END;
inc(flag);
/* arr[flag] = arr[tail] xor arr[flag];
arr[tail] = arr[tail] xor arr[flag];
arr[flag] = arr[tail] xor arr[flag]; */
tmp = arr[flag];
arr[flag] = arr[tail];
arr[tail] = tmp;
return flag;
END;
procedure quicksort (var array integer arr of, integer head, integer tail)
BEGIN
integer flag;
IF head<tail then
BEGIN
flag = partition (arr,head,tail);
quicksort (arr,head,flag-1);
quicksort (arr,flag+1,tail);
END;
END;
program
begin
integer i;
integer n;
integer arr[100];
read(n);
FOR (i,0,to,n) DO
read(arr[i]);
quicksort(arr,0,n-1);
FOR (i,0,to,n) DO
writeln(arr[i]);
end
2010年11月02日 10点11分
2
level 9
写C的话掉系统快排吧。
int cmp(const void *a, const void *b) 【自己写的比较函数,返回大于0则交换】
{
return *(int*)a - *(int*)b; //对于每种类型的都强制转换再比较就行了。
}
qsort( 要排序的结构的起始位置, 要排序的结构的个数, 每个结构的大小, cmp)
例子:
int a[1003];
//从a[1]到a[n]排序:
qsort( a+1, n, sizeof(a[0]), cmp );
2010年11月02日 13点11分
9
level 7
LZ 你还少了很多#define吧
我见过某种一堆define之后 程序可以写成这样…………不过表示完全没有必要……
2010年11月02日 13点11分
11
level 7
LZ
其实是来考我们的吧?
不是xor的问题…………
不过表示看着一堆begin end 蛋疼…………
2010年11月02日 13点11分
12
level 9
还有 var array integer arr of……
神马玩意……
PS:我是5L
2010年11月02日 13点11分
13
level 8
其实我是为了防止大家被弄晕才不把宏定义贴出来的,明天贴。
2010年11月02日 15点11分
14