一道数据结构问题

这样的题我没有见过,应该怎么作答呢。 可不可以帮我完整的解一遍。我好做参考,谢谢

首先,我的理解,题目意思就是把等于 X 的数据移动到数组的前面

因为没有限制,所以难度不大

可以这样做:
1 新建一个数组B

2 历遍数组A,找到数组A中值等于X的数,把对应的数组下标存到B中(有点绕) (感觉你是个刚学编程的,复杂度什么的我就不说了哈) 。解释下,比如 A[ (B[c]) ] (c是一个变量,为 0 到 数组B大小减1 ),就是需要移动到数组A前面的数据

3 假设变量i初始值0,范围为0到 数组B的大小减1 。然后把A[i] 和 A[ (B[i]) ] 的值交互,i一直递增到数组B大小减1

4 搞定
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-19

方法不是最好的,仅供参考。

(1)算法设计思想:

     从数组末端往前遍历(下标记为i),若发现值等于x, 与按照从前往后的顺序,第一个不等于x的元素(下标记为j)进行交换。当i等于j时,结束操作。


(2)部分c语言描述


int j = 0;
int temp;
for(int i = length - 1;i >= 0;i--){ // 假定 length是整型数组number的长度
    while(A[j] == x && j<i){
            j++;
    }
    if(j == i){ 
        break;
    }
    if(A[i] == x){
         temp = A[j];
         A[j] = A[i];
         A[i] = temp;           
    }
}

相似回答