[英]2D array single row sorting
我正在嘗試通過java用2D數組實現流行的霍夫曼編碼算法。
這個想法是創建這個2D數組,將輸入的概率排序並插入到數組的第一行中,然后接下來的每一行中的第一個元素將是上一行中前2個元素的總和。
然后對當前行進行排序,然后繼續進行下一行。
不幸的是,我在2D數組中的各個行的排序中看到了一個奇怪的輸出。 這是代碼。
import java.util.Scanner;
public class SolaihtheHuffman {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("Please enter the number of letters.");
int numberofletters=input.nextInt();
float [][] grandoverseer=new float[numberofletters][numberofletters];
float [] probabilities = new float [numberofletters];
System.out.println("Please enter each letter's probability.");
for(int x=0;x<numberofletters;x++){
probabilities[x]=input.nextFloat();
}
float [] copiedprobabilities=new float[numberofletters];
System.arraycopy(probabilities, 0, copiedprobabilities, 0, numberofletters);
Sort(copiedprobabilities); //WORKS PROPERLY
for(int x=0;x<numberofletters;x++){
grandoverseer[x][0]=copiedprobabilities[x];
}
for(int x=0;x<numberofletters;x++){
System.out.println("Row "+grandoverseer[x][0]);
}
String [] lettercodes=new String[numberofletters];
for(int x=0;x<numberofletters;x++){
lettercodes[x]="";
}
for(int i=1;i<numberofletters;i++){
grandoverseer[0][i]=grandoverseer[0][i-1]+grandoverseer[1][i-1];
for(int j=1;j<numberofletters;j++){
if(j==4) break;
grandoverseer[j][i]=grandoverseer[j+1][i-1];
}
for(int k=0;k<numberofletters-i;k++){
copiedprobabilities[k]=grandoverseer[k][i];
}
Sort(copiedprobabilities);
for(int k=0;k<numberofletters-i;k++){
grandoverseer[k][i]=copiedprobabilities[k];
}
}
for(int x=0;x<numberofletters;x++){
for(int y=0;y<numberofletters;y++){
System.out.println("Row "+(x+1)+": "+grandoverseer[y][x]);
}
}
}
public static void Sort(float [] array){
int smallestposition;
for( int i=0; i<array.length;i++){
smallestposition=i;
for(int j=i+1; j<array.length ;j++){
if(array[j]<array[smallestposition]){
smallestposition=j;
}
}
if(smallestposition!=i){
float temp=array[i];
array[i]=array[smallestposition];
array[smallestposition]=temp;
}
}
}
}
我正在使用的示例是這樣的:從A到E的5個字母,A:0.3,B:0.1,C:0.2,D:0.15,E:0.25
如果代碼按預期工作,則將看到2D數組的以下輸出:第1行:0.1、0.15、0.2、0.25、0.3第2行:0.2、0.25、0.25、0.3、0.0第3行:0.25、0.3、0.45 ,0.0,0.0第4行:0.45,0.55,0.0,0.0,0.0第5行:1.0,0.0,0.0,0.0,0.0
在此之后嘗試打印數組將得到以下輸出:第1行:0.1 0.15 0.2 0.25 0.3第2行:0.2 0.25 0.25 0.3 0.0第3行:0.25 0.3 0.3 0.0 0.0第4行: 0.3 0.3 0.0 0.0 0.0第5行: 0.3 0.0 0.0 0.0 0.0
突出顯示的數字是不正確的,由於某種原因,在正確地對第二行進行了排序之后,第三行中的最后一個數字不是0.45而是0.3,並且0.3重復了其余的數字。出?
預先感謝您,如果造成任何混淆,我們深表歉意!
出於某些荒謬的原因,我嘗試用新數組替換copyedprobabilities數組,而不是覆蓋舊數組。
為什么這樣行得通而覆蓋復制的概率卻沒有,我永遠不會知道...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.