У меня есть хеш-таблица структур.Я хотел отсортировать содержимое блоков, используя алгоритм быстрой сортировки, и вот код, который я попробовал.Содержимое корзины хеш-таблицы результата вообще не сортируется.
#define BUCKETS 6000
#define BK_ENTRIES 1024
void q_sort(int,int,int);
typedef struct fpinfo
{
char fing_print[33];
}fpinfo;
Метод q_sort
void q_sort(int left, int right,int bk)
{
if(left>=right)
return ;
char l_hold[33], r_hold[33];
int pivot=left;
l_hold=hash_table[bk][left].fp;
r_hold=hash_table[bk][right].fp;
hash_table[bk][pivot].fp=hash_table[bk][left].fp;
while (left < right)
{
while ((strcmp(hash_table[bk][right].fp,hash_table[bk][pivot].fp)>=0) && (left < right))
right--;
if (left != right)
{
hash_table[bk][left].fp=hash_table[bk][right].fp;
left++;
}
while ((strcmp(hash_table[bk][left].fp,hash_table[bk][pivot].fp)<=0) && (left < right))
right--;
if (left != right)
{
hash_table[bk][right].fp= hash_table[bk][left].fp;
left++;
}
}
hash_table[bk][left].fp=hash_table[bk][pivot].fp;
hash_table[bk][pivot].fp=hash_table[bk][left].fp;
hash_table[bk][left].fp=l_hold;
hash_table[bk][right].fp=r_hold;
if ((strcmp(hash_table[bk][left].fp,hash_table[bk][pivot].fp)<=0))
q_sort(left, pivot-1,bk);
if ((strcmp(hash_table[bk][right].fp,hash_table[bk][pivot].fp)>0))
q_sort(pivot+1, right,bk);
}
Вот как я назвал его в main
fread(hash_table,sizeof(hash_table),1,htfile);
for(int j=0;j<BUCKETS;++j)
{
q_sort(0,BK_ENTRIES-1,j);
}
Вы можете сказать, что код слишком длинный, но я не смогсделайте его короче.
РЕДАКТИРОВАТЬ:
Вот объявление hash_table
struct fpinfo hash_table[BUCKETS][BK_ENTRIES];
Я решил свою проблему с функцией библиотеки cQSort ().Но на случай, если кто-то из вас захочет все же разобраться с этой проблемой, я обновлю ее как ваши предложения.