数组元素删除与排序


2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1。向main()中添加一些代码来使用这个方法。 可以假设所有关键字都是正数。
2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除。 将这个方法命名为removeMax()。
2.3 编程作业2.2中的removeMax()方法提供了一种通过关键字值进行数组排序的方法。实现一个 排序方案,要求不修改HighArray类,只需对main()中的代码进行修改。这个方法需要第二个 数组,在排序结束时数组数据项是逆序排列的。
2.6 向highArray.java程序(清单2.3)的HighArray类中加入一个noDup()方法,使之可以将数组的所有重复数据项删除。即如果数组中有三个数据项的关键字为17,noDup()方法会删除其中的两个。不必考虑保持数据项的顺序。一种方法是先用每一个数据项同其他数据项比较,并用null(或是一个不会用在真正的关键字中的特殊值)将重复的数据项覆盖掉。然后将所有的null删除,当然还要缩小数组的大小。



public class HighArray {

    /**
     * @param args
     */
    private long[] a;
    private int nElems;

    public HighArray(int max){
        a = new long[max];
        nElems = 0;
    }

    public boolean find(long searchKey){
        int j;
        for(j=0;j<nElems;j++){
            if(a[j] == searchKey){
                break;
            }
        }
        if(j == nElems)
            return false;
        else 
            return true;
    }

    public void insert(long value){
        a[nElems] = value;
        nElems++;
    }

    public void delete(long value){
        int j ;
        for(j = 0;j < nElems;j++)
            if(value == a[j])
                break;

        for(int k = j;k < nElems;k++){
                a[k] = a[k+1];
        }
        nElems--;
    }

    public void display(){
        for(int j = 0;j < nElems;j++){
            System.out.print(a[j] + " ");
        }
        System.out.println("");
    }

    //=======================================================================================
    //编程作业2.1
    public long getMax(){
        long max = -1;
        for(int j =0; j < nElems-1;j++){
            if(a[j] > max){
                max = a[j];
            }   
        }
        return max;
    }

    //==========================================================================================
    //编程作业2.2
    public long removeMax(){
        long max = -1;
        int index = -1;
        for(int j = 0;j <nElems;j++){
            if(a[j] > max){
                max = a[j];
                index = j;
            }   
        }
        if(index != -1){
            for(int i = index+1;i< nElems;i++){
                a[i-1] = a[i];
            }
            nElems--;
        }
        return max;
    }

    //==========================================================================================
    //编程作业2.6
    public void noDup(){
        int NULL = -1;
        for(int j = 0;j <nElems;j++){
            for(int i = j+1;i < nElems;i++){
                if(a[j]!=NULL && a[j]==a[i]){
                    a[i] = NULL;
                }
            }
        }
        for(int i = 0;i < nElems;){
            if(a[i]==NULL){
                for(int j =i+1;j < nElems; j++){
                    a[j-1] = a[j];
                }
                nElems--;
            }
            else{
                i++;
            }
        }
    }
}

public class HighArrayApp {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int maxSize = 100;
        HighArray arr;
        arr = new HighArray(maxSize);
        arr.insert(77);
        arr.insert(99);
        arr.insert(44);
        arr.insert(55);
        arr.insert(22);
        arr.insert(88);
        arr.insert(11);
        arr.insert(00);
        arr.insert(66);
        arr.insert(33);

        arr.display();

        int searchKey = 35;
        if(arr.find(searchKey)){
            System.out.println("Found "+searchKey);
        }
        else{
            System.out.println("Can't find "+searchKey);
        }
        arr.delete(00);
        arr.delete(55);
        arr.delete(99);

        arr.display();

        //==========================================================================================
        //编程作业2.1
        long max = arr.getMax();
        System.out.println("Found max is "+max);

        //================================================================================
        //编程作业2.2
        arr.removeMax();
        arr.display();

        //================================================================================
        //编程作业2.3
        HighArray sortedArr = new HighArray(maxSize);
        int i = 0;
        max = arr.removeMax();
        while(max!=-1){
            sortedArr.insert(max);
            max = arr.removeMax();
        }
        System.out.println("逆序排列");
        sortedArr.display();

        arr.insert(77); // insert 10 items 
        arr.insert(99);
        arr.insert(44);
        arr.insert(55);
        arr.insert(22);
        // 重复值
        arr.insert(44); 
        arr.insert(77); 
        arr.insert(44); 
        arr.insert(66); 

        arr.insert(88);
        arr.insert(11); 
        arr.insert(00);
        arr.insert(66);
        arr.insert(33);
        System.out.println("加入重复值后:");
        arr.display();
        arr.noDup();
        System.out.println("去掉重复后:");
        arr.display();

    }

}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值