Мне любопытно, почему вы не просто используете встроенные средства сортировки Python, либо sort
или sorted
в зависимости от ваших потребностей.Вероятно, это будет более эффективно, чем то, что вы делаете сами (если вы не используете конкретную дополнительную информацию о наборе данных, что, похоже, здесь не так). может быть тем, что вы делаете это в образовательных целях, и в этом случае не стесняйтесь игнорировать этот парагаф, но я был бы упущен, не упоминая встроенный материал, если ваше намерение состоит только в сортировкенекоторые данные.
В любом случае, ваш конкретный вопрос, по-видимому, заключается в том, как "объявить темп массива размера входного массива a".
Это легко сделать с помощью оператора:
temp = [0] * len(a)
Следующая транскрипция показывает это:
>>> a = [1,2,3]
>>> temp = [0] * len(a)
>>> temp
[0, 0, 0]
На данный момент у вас есть:
temp = []
, который создает список нулевого размера, за которым следует:
temp[k] = a[i]
Это всегда будет вызывать проблему, поскольку нет значения k
, для которого это будет работать.
Кроме того, ваше фактическое слияние имеет недостаткив том, что вы используете неправильные переменные для обработки массивов.Вы вполне логически связали определенные элементы, такие как i
с первым разделом массива и j
со вторым, но затем нарушите это:
while ( i <= u2 ): # i and u1 should be associated: while i <= u1:
temp[k] = a[i] # (no need for '()' in Python conditions by the way).
k = k + 1
i = i + 1
while ( j <= u2 ):
temp[k] = a[j]
k = k + 1
i = i + 1 # j and u2 should be associated: j = j + 1
Даже после того, как вы исправите массивсоздание, вполне вероятно, что второй цикл выше вызовет проблему.Он будет работать вечно (или до исключения, в зависимости от того, что наступит раньше), потому что вы проверяете j
, но никогда не меняете его.Однако оба элемента , указанные выше, неверны, поэтому их следует исправить.
Как только я сделаю массив правильного размера, внесу эти два изменения и распечатаю массив до и после сортировки, кажется,немного лучше:
[8, 5, 7, 1, 9, 3]
[1, 3, 5, 7, 8, 9]