数据结构 - Vector
class vector {
int *data;
int size;
int used;
}
void vector::append(int value){
if(used==size){
int new_size = size*2;
int *new_data = new int[new_size];
int size_copy = size*sizeof(value);
memcpy(new_data, data, size_copy);
delete[] this->data; // 删除旧空间
this->data = new_data; // 使用新空间
this->size = new_size;
}
data[++used] = value; // 添加数据
}
reverse
void reverse(X, N){
int half = N/2-1
for(int i=0; i < half; i++){
exchange(data[i], data[N-1-i]);
}
}
half
void half(X, N){
int half = N/2-1
for(int i=0; i < half; i++){
X[i] = X[i*2];
}
}
zip
void zip(int X[], N, int Y[], M){
int *result = new int[N+M];
int i;
for(i=0; i<M && i<N; i++){
lappend(result, X[i], Y[i]);
}
for(int j=i; j<N; j++){
lappend(result, X[j]);
}
for(int j=i; j<M; j++){
lappend(result, Y[j]);
}
return result;
}
Merge Sort
X, Y 有序排列,Z = lsort [concat $X $Y]
void merge(int X[], N, int Y[], M){
int *result = new int[N+M];
int i,j;
for(int i=0, j=0; i<M && j<N; /* NOP */){
if(X[i]<=Y[j]){
lappend(result, X[i]); i++;
}else{
lappend(result, Y[j]); j++;
}
}
for(int k=i; k<N; k++) lappend(result, X[k]);
for(int k=j; k<M; k++) lappend(result, Y[k]);
return result;
}