我有一個很大的二維數組,array[length][2]
。 length= 500000
。查找數組中每個元素的出現次數並更新與每個元素相關的信息
在array[i][0]= hex number
,array[i][1]= 0
或1
中,它表示與每個十六進制數有關的一些信息。就像這樣:
array[i][0] array[i][1]
e05f56f8 1
e045ac44 1
e05f57fc 1
e05f57b4 1
e05ff8dc 0
e05ff8ec 0
e05ff900 1
我希望得到一個新的陣列存儲:十六進制數,次數排名,陣列的總和[I] [1]相同的十六進制數。
我寫這樣的代碼:
//First Sort the array according to array[][0]
int x,y,temp1,temp2;
for (x=lines_num1-2;x>=0;x--)
{
for (y=0;y<=x;y++)
{
if(array[y][0]>array[y+1][0])
{
temp1=array[y][0];
array[y][0]=array[y+1][0];
array[y+1][0]=temp1;
temp2=array[y][1];
array[y][1]=array[y+1][1];
array[y+1][1]=temp2;
}
}
}
// generate the new_array[][]
int new_array[length][3];
int n=0;
for (n=0; n<length; n++){
new_array[n][0]=0;
new_array[n][1]=0;
new_array[n][2]=0;
}
int prev = array[0][0];
new_array[0][0]=array[0][0];
new_array[0][1]=1;
new_array[0][2]=array[0][2];
for (k=1;k<length;k++)
{
if (array[k][0] == prev)
{
new_array[n][1]=new_array[n][1]+1;
new_array[n][2]=new_array[n][2]+array[k][0];
}else{
prev = array[k][0];
new_array[n+1][0]=array[k][0];
new_array[n+1][1]=new_array[n+1][1]+1;
new_array[n+1][2]=new_array[n+1][2]+array[k][0];
n++;
}
}
但正如我預期的代碼似乎不起作用。首先排序很慢。而且它似乎無法生成正確的new_array。任何有關如何處理這個問題的建議。
結果是什麼[/ * ... * /]是什麼意思? – user1510866
散列C中的lib函數嗎?或者我需要自己寫一個散列函數? – user1510866
你需要自己寫一個。這取決於你的目標是什麼(碰撞等)。註釋表示'result'數組的大小。 – md5