数据结构 - 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;
}