数组元素删除与排序

来源:互联网 发布:有赞 知乎 编辑:程序博客网 时间:2024/05/19 14:19

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();    }}
1 0