2016-07-05 8 views
-2

моя функция insertionSort работает для небольших массивов, но не работает для массива с 50 000 случайных значений. Я потратил часы, пытаясь понять это, но я в тупике. Вот код:C++ inserting sort не работает для больших массивов

void insertionSort(int array[], int length) { 
    int swapHolder, counter, index; 
    for (counter = 1; counter < length; counter++) { 
     index = counter; 
     while (counter > 0 && array[index - 1] > array[index]) { 
       swapHolder = array[index]; 
       array[index] = array[index - 1]; 
       array[index - 1] = swapHolder; 
       index--; 
     } 
    } 
} 

Моя другая функция сортировки (BubbleSort) отлично работает для больших массивов, но я повесил трубку, по этому вопросу.

+5

Когда вы говорите «не работает», что вы подразумеваете под этим? Не могли бы вы попытаться создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) и показать нам? И пожалуйста [читайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask). –

+0

Почему вы уменьшаете 'index' вместо того, чтобы увеличивать его? O_o – mangusta

+1

... и почему вы проверяете, есть ли« counter> 0 », потому что это всегда будет верно? Гарантированный. 'counter' всегда не менее 1, и он никогда не уменьшается. Ответ на этот вопрос просто: «Ваша реализация сортировки вставки неверна». –

ответ

2

Линия

while (counter > 0 && array[index - 1] > array[index]) { 

должен быть

while (index > 0 && array[index - 1] > array[index]) { 

На более глубоком примечании, средняя сложность для вставки рода есть O(n^2) так, что она работает лучше всего для небольших массивов. То есть, это не правильный алгоритм для сортировки 50 000 значений.

+0

Ну, и не BubbleSort. Я думаю, он просто пытается понять это правильно, и оба должны работать правильно (хотя и медленно) даже для больших массивов. –

+0

Спасибо, что решил мою проблему. Моя программа показывает, что потребовалось только 1828 миллисекунд для сортировки 50 000 значений. –

+0

@RudyVelthuis Это классный проект, показывающий скорость различных методов сортировки/поиска. –