2016-01-09 2 views
0

Одна из функций, которые я выполняю, использует сортировку вставки для двумерного массива с 2 строками и 12 столбцами. Первая строка предназначена для идентификаторов студентов, поэтому всего 12 учащихся. Вторая строка имеет соответствующий GPA для каждого ученика. Я не уверен, как создать сортировку вставки для сортировки номеров GPA в порядке возрастания. Любая помощь была бы потрясающей!Использование функции сортировки вставки для двумерного массива в C++?

У меня это до сих пор.

void insertionSort(double avg[][COLS]) 
{ 
int current = 1; 
int last = COLS - 1; 
int temp; 
int walker; 
int row = 1; 

while (current <= last) 
{ 
    temp = avg[row][current]; 
    walker = current - 1; 
    while (walker >= 0 
     && temp < avg[row][walker]) 
    { 
     avg[row][walker+1] = avg[row][walker]; 
     walker = walker - 1; 
    } 

    avg[row][walker+1] = temp; 
    current = current + 1; 
} 
+0

что проблема сортировки вы сделали? это, кажется, правильный порядок вставки? – m7mdbadawy

+1

Вы против идеи использовать ['std :: sort()'] (http://en.cppreference.com/w/cpp/algorithm/sort)? – YSC

+1

Вопрос в том, почему это двумерный массив. Идентификатор студента является буквенно-цифровым, GPA - плавающей точкой. Кто придумал такую ​​идею, чтобы сделать 2d-массив из двух разных типов? – PaulMcKenzie

ответ

1

Ваша проблема в том, что temp переменная объявлена ​​как межд она должна быть двойной, и вы должны поменять идентификаторы слишком

void insertionSort(double avg[][COLS]) 
{ 
    int current = 1; 
    int last = COLS - 1; 
    double temp;//this was an int 
    int walker; 
    int row = 1; 

    while (current <= last) 
    { 
     temp = avg[row][current]; 
     walker = current - 1; 
     while (walker >= 0 
       && temp < avg[row][walker]) 
     { 
      avg[row][walker+1] = avg[row][walker]; 
      avg[row-1][walker+1] = avg[row-1][walker];//swap the id of two students 
      walker = walker - 1; 
     } 

     avg[row][walker+1] = temp; 
     avg[row-1][walker+1] = temp; 
     current = current + 1; 
    } 
} 
Смежные вопросы