最差的算法:算法
最差的算法: 去重,與數組是否有序無關 public void noDups(){ //從0開始遍歷 for(int i=0; i<nElems-1; i++){ //與後面每個比較 for(j=i+1; j<nElems; j++){ //若是相等,後面的全部的項向前移動,總數-1 if(a[i]==a[j]){ for(k=j+1; k<nElems; k++){ a[j] = a[j+1]; nElems--; } } } } } 把後面不一樣的往前 public void noDups(){ //數組從小到大排列 this.insertionSort(); int i=0; //第一個指針 int j=0; //第二個指針 for(j=1; j<nElems;j++){ //遇到相同的跳過,不一樣的則加到前面 if(a[j]!=a[i]){ a[++i]=a[j] } } nElems = i+1; } 把重複的標記爲-1,假設沒有負數 public void noDups(){ //數組從大到小排列 this.insertionSort(); final int FLAG = -1; //重複數字標記 int holdNumber; //被標記的數字個數 //尋找重複項並標記 for(int i=0; i<nElems; i++){ for(int j=i+1; j<nElems; j++){ if(a[i]==a[j]){ a[j] = FLAG; holdNumber++; } } } //處理被標記的數字 //思路和第一個同樣 int i=0; //索引位 for(int j=1; j<nElems; j++){ //第一個不多是重複數 //找到第一個標記位 if(a[j]==FLAG && i==0){ i = j; }else if(a[j]!=FLAG && i!=0){ //邏輯同第二個算法 a[i] = a[j]; i++; } } nElems -= holdNumber; }