我在网上查了一下归并排序算法,都需要分配一个新的数组,下面是我考虑的代码(不分配新的数组),不知道这样是否可行,效率如何,希望得到指点。
void mergsort(int v[], int left, int right){
int i, j, k, middle, temp;
if((right-left) < 2){
if(v[left] > v[right]){
temp = v[left];
v[left] = v[right];
v[right] = temp;
}
return;
}
middle = (left + right) / 2;
mergsort(v, left, middle);
mergsort(v, middle+1, right);
for(i=left, j=middle+1;j<=right;j++){
if(v[i] >= v[j]){
temp =v[j];
k = j;
while(k > i){
v[k] = v[k-1];
k--;
}
v[k]= temp;
i++;
}
}
}
void mergsort(int v[], int left, int right){
int i, j, k, middle, temp;
if((right-left) < 2){
if(v[left] > v[right]){
temp = v[left];
v[left] = v[right];
v[right] = temp;
}
return;
}
middle = (left + right) / 2;
mergsort(v, left, middle);
mergsort(v, middle+1, right);
for(i=left, j=middle+1;j<=right;j++){
if(v[i] >= v[j]){
temp =v[j];
k = j;
while(k > i){
v[k] = v[k-1];
k--;
}
v[k]= temp;
i++;
}
}
}