2016-02-22 3 views
2

У меня есть проект создания программы планирования, и одна ее часть требует сортировки. Я знаю, как это сделать с обычной сортировкой пузырьков, но проект просит меня сделать это так ...C++ сортировка путем создания массива индексов

sort() - функция сортировки данных массива float [], создающая массив отсортированных индексов. Функция sort() не сортирует данные, а заполняет массив indx [] так, чтобы данные [indx [0]], данные [indx [1]], ..., data [indx [NUM_EVENTS - 1] ] - значения данных [] в порядке возрастания.

Этот код, который я имею здесь, сортирует данные, но не делает это так, как это должно быть сделано. Это должно быть так, потому что мы не используем объекты, и индексы разных массивов должны соответствовать. Я действительно не могу понять, что делать, чтобы сортировать по индексам. Любая помощь будет оценена.

void sort(float data[], int indx[], int len){ 
    float temp; 

    //this for loop was just to declare the array of indices 
    //as it is passed in empty 
    for (int i = 0; i < len; i++){ 
    indx[i] = i; 
    } 

    for (int i = 0; i < len - 1; i++){ 
    for (int j = 0; j < len - 1; j++){ 

     if (data[j] > data[j+1]){ 
      temp = data[j]; 
      data[j] = data[j+1]; 
      data[j+1] = temp; 
     } 


    } 
    } 
} 
+3

Если данные не в порядке, вместо замены данных, поменяйте индексный массив. Для меня это довольно просто. Если вы проработали это с использованием карандаша и бумаги, вы должны увидеть, что делается концептуально. – PaulMcKenzie

+0

Спасибо! Я не знаю, почему это так сильно задержало меня. Он работает сейчас. –

+1

Примечание - сравнение должно быть | if (data [indx [j]]> данные [indx [j + 1]]) | , – rcgldr

ответ

1

Попробуйте вместо этого:

void sort(float data[], int indx[], int len) { 

    float temp; 

    for (int i = 0; i < len; i++) { 
     indx[i] = i; 
    } 

    for (int i = 0; i < len - 1; i++) { 
     for (int j = 0; j < len - 2; j++) { 
      if (data[indx[j]] > data[indx[j+1]]) { 
       temp = indx[j]; 
       indx[j] = indx[j+1]; 
       indx[j+1] = temp; 
      } 
     } 
    } 

} 

Кстати ... есть определенные оптимизации вы можете к вашему методу пузырьковой сортировки. Помните, что каждый проход требует одного теста меньше, поскольку один элемент застревает в своем окончательном положении. Это очень помогает, когда дело доходит до производительности, если вам приходится сортировать длинные списки.

Смежные вопросы