Як я можу ефективно порівнювати два ряди багатовимірного масиву?
наприклад, якщо у мене є такий багатовимірний масив:
char Multi_Array[4][5] = {
{0,1,2,3,4}, //Row1
{5,6,7,8,9}, //Row2
{0,1,2,3,4}, //Row3
{5,9,6,3,2} //Row4
}
Я хотів би порівняти кожен рядок один з одним, щоб зрештою отримати всі унікальні рядки
Відповіді:
1 для відповіді № 1У вашому прикладі найефективнішою є, напевно, логіка з грубою чи жорсткою.
Для більших масивів можна вибрати окремий масив покажчиків на перший символ у кожному рядку, а потім запустити qsort
разом з memcmp
.
Після сортування покажчиків, ви можете перейти, що сортується масив і використовувати memcmp
знову порівнювати рядок з попереднім. Можна одночасно видалити дублікати зі списку. наприклад,
int i, uniq = 0;
for( i = 1; i < NUM_ROWS; i++ )
{
if( 0 != memcmp( sorted[uniq], sorted[i], ROW_SIZE ) )
sorted[++uniq] = sorted[i];
}
++uniq;
Якщо ваші рядки невеликі, ви можете повністю пропустити масив покажчиків і змінювати масив на місці (якщо це те, що ви хочете зробити).