2014-10-09 3 views
-2

Итак, у меня есть два массива. один с именами игроков и другие с их баллы. Пример:сортировка имен и оценок

Array 1: [0] - John | [1] - Мэри | [2] - Николас | [3] - Thomas

Array 2: [0] - 20 | [1] - 5 | [2] - 29 | [3] - 26

Что я пытаюсь сделать, так это отсортировать оба этих массива с помощью метода quicksort и кода ниже.

void quick_sort(int arr[4],char arr2[4][20],int low,int high) 
{ 
int pivot,j,temp,i; 
char *temp2; 
if(low<high) 
{ 
    pivot = low; 
    i = low; 
    j = high; 

    while(i<j) 
    { 
    while((arr[i]<=arr[pivot])&&(i<high)) 
    { 
    i++; 
    } 

    while(arr[j]>arr[pivot]) 
    { 
    j--; 
    } 

    if(i<j) 
    { 
    temp=arr[i]; 
    temp2=arr2[i]; 
    arr[i]=arr[j]; 
    strcpy(arr2[i], arr2[j]); 
    arr[j]=temp; 
    strcpy(arr2[i], temp2); 
    } 
    } 

    temp=arr[pivot]; 
    temp2=arr2[pivot]; 
    arr[pivot]=arr[j]; 
    strcpy(arr2[pivot], arr2[j]); 
    arr[j]=temp; 
    strcpy(arr2[j], temp2); 
    quick_sort(arr,arr2,low,j-1); 
    quick_sort(arr,arr2,j+1,high); 
} 
} 

После этого, когда я PRINTF массивы вместо того, чтобы дать мне это (то, что я хотел):

  1. Мэри - 5 баллов
  2. John - 20 баллов
  3. Томас - 26 очков
  4. Николай - 29 очков

он выводит меня это :

  1. Джон - 5 баллов
  2. Джон - 20 очков
  3. Николай - 26 очков
  4. Николай - 29 очков

Я смотрел на код и я не могу найти проблема. У кого-нибудь из вас есть какие-то предложения? Мне нужно доставить это до полуночи

EDIT: мне был предоставлен мой учитель код для сортировки результатов в массиве, но также дал нам еще один массив с именами игроков, он уже сортировал оценки, и она сказал нам, чтобы он работал для имен, а также то, что я не могу получить на работу

+0

Не стоит так долго задавать вопросы. Вы не очень хорошо объясняете это. Вы дали нам свой результат, но никогда не говорили, что вы на самом деле делаете с кодом. Вам нужно делать это, как идиот, и использовать два массива, или вы можете использовать такие объекты, как вы должны? Является ли это окончательной проблемой для класса, если да, то в чем проблема? – blackops

+0

Мне дал мой учитель код для сортировки результатов в массиве, но также дал нам еще один массив с именами игроков, он уже сортировал оценки, и она сказала нам, чтобы он работал для имен, а также, thats, что я не могу получить на работу – aconstancio

+0

ну, я просто решил его, используя массив структуры. благодарю вас всех за ваши ответы и усилия, чтобы помочь. хотя некоторые из вас были довольно грубы. – aconstancio

ответ

1

Почему бы вам просто не использовать стандартную библиотеку c? Возьмите функцию сортировки. Вместо того, чтобы иметь два массива, просто сохраняйте один массив структур.

своего рода вызов на cppreference.com

http://en.cppreference.com/w/c/algorithm/qsort

+0

и с помощью этой функции будут отсортированы имена? – aconstancio

+0

Вы можете сортировать структуры вместо сохранения двух массивов в том же порядке. – Timon

+0

ОК, поэтому я пытаюсь сделать то, что вы сказали. его следующее: Это struct struct score { char * name; int score; }; Я заполнил массив именами и оценками уже. теперь я пытаюсь использовать функцию qsort, я отредактирую это после – aconstancio

0

Эта часть кажется любопытным:

strcpy(arr2[i], arr2[j]); 
arr[j]=temp; 
strcpy(arr2[i], temp2); 

arr2[j] копируется arr2[i]. Затем temp2 копируется в arr2[i]. Так что нет никакого смысла в решении arr2[j] ... Я предполагаю, что это должно быть:

strcpy(arr2[i], arr2[j]); 
arr[j]=temp; 
strcpy(arr2[j], temp2); 

Я согласен с @Timon: использование qsort является лучшим вариантом ...

EDIT: Теперь, ваш вопрос вопрос указателя:

temp2=arr2[i]; 
strcpy(arr2[i], arr2[j]); 

После этой операции, значение temp2 является arr2[j]!temp2 указывает на содержимое arr2[i], а содержимое arr2[i] перезаписывается arr2[j]. Чтобы этого не случилось, вам нужно объявить temp2 как char temp2[20]; и сделать что-то вроде strcpy(temp2,arr2[i]);

+0

да. я думаю, что вы правы, но проблема не в этом, проблема остается – aconstancio

+0

Я сделал это, но сразу, когда я запускаю программу, она перестает работать и пытается найти решение проблемы – aconstancio