2016-02-20 5 views
0
import random 
i=1 
a=[] 
while(i<=10000): 
    b=random.randint(0,9999) 
    a.append(b) 
    i=i+1 
print(a) 

def kgsorting(a): 
    k=1 
    sum=a[0] 
    while(k<=(len(a)-1)): 
     sum=sum+a[k] 
     k=k+1 
    avg=sum/len(a) 
    return avg 

#print(kgsorting(a)) 

def splitlist(a): 
    i=0 
    b=[] 
    c=[] 
    avg=kgsorting(a) 
    while(i<=(len(a)-1)): 
     if(a[i]>=avg): 
      b.append(a[i]) 
     else: 
      c.append(a[i]) 
     i=i+1 
    return c,b 


(c,b)=splitlist(a) 
#print(f+g) 
#g=int(input()) 

i=1 
while(i<=1): 
    (f,g)=splitlist(c) 
    (h,y)=splitlist(b) 
    i=i+1 
flen=len(f) 
glen=len(g) 
hlen=len(h) 
ylen=len(y)  

i=1 
while(i<=flen): 
    k=0 
    while(k<=(flen-2)): 
     if (f[k+1]<f[k]): 
      temp=f[k+1] 
      f[k+1]=f[k] 
      f[k]=temp 
     k=k+1 
    i=i+1 
#print(b) 


i=1 
while(i<=glen): 
    k=0 
    while(k<=(glen-2)): 
     if (g[k+1]<g[k]): 
      temp=g[k+1] 
      g[k+1]=g[k] 
      g[k]=temp 
     k=k+1 
    i=i+1 
#print(c) 
#print((c+b)) 


i=1 
while(i<=hlen): 
    k=0 
    while(k<=(hlen-2)): 
     if (h[k+1]<h[k]): 
      temp=h[k+1] 
      h[k+1]=h[k] 
      h[k]=temp 
     k=k+1 
#print(b) 


i=1 
while(i<=ylen): 
    k=0 
    while(k<=(ylen-2)): 
     if (y[k+1]<y[k]): 
      temp=y[k+1] 
      y[k+1]=y[k] 
      y[k]=temp 
     k=k+1 
    i=i+1 
#print(c) 
print((f+g+h+y)) 

wer=int(input()) 

привет! Я пытаюсь запрограммировать код сортировки в python 3. В основном я хочу разделить массив дат, скажем, 1000 случайных чисел на неравные части. Условие заключается в том, что элемент списка находится ниже или выше, чтобы усреднить все числа. Тогда я использовал сортировку пузырьков 4 раза, чтобы отсортировать два списка. Эта сортировка, кажется, быстрее, чем bubblesort, и я хочу разделить, например, в 2,4,8,16,32,64 ... n, не делая того, что я сделал для код для 4 расщеплений. Очевидно, чем больше расщепляется, тем быстрее это происходит, поэтому я хочу n splits.I не нашел способ сделать это рекурсивно или циклом или чем-то. У вас есть идея, что делать? thanks Редактировать: программа в начале делает список из случайных целых чисел, затем вычисляет среднее значение, затем разбивает список a на c, b списки, а затем разбивает c на f, g и b на h, y list. Наконец, i имеют 4 списка, и я использовал сортировку по 4 раза для каждого списка, чтобы отсортировать их, и я объединил 4 списка в конце. Кто-нибудь знает, как сделать n разделов, чтобы перечислить?python постоянно разделяет массив

+0

может быть проще сформулировать свой вопрос с помощью ввода и желаемого результата, а не прогуливать нас по вашему подходу (сделайте это, комментируя код ...). Ваша копия/вставка цикла while может быть функцией, которую вы применяете, и тогда мы могли бы уточнить это дальше, но я не уверен, что понимаю, что вы пытаетесь получить в конце, что затрудняет советы правильного подхода, а не просто синтаксически правильный код. –

ответ

0

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

Другой способ будет просто разбить список на п количество штук, но это также будет работать только если у вас количество списков Python: fastest way to create a list of n lists показывает, как сделать это с

d = [[] for x in xrange(n)] 

хотя это создает список списков может быть сделано с некоторой работой

Затем сделать рекурсивный цикл вы могли бы сделать

def recursiveLoop(list, n): 
    d = [[] for x in xrange(n)] 
    index = 0 
    while(index < len(list)/2): #splits the list 
     d.append(list[index]) 
     index++ 
    recursiveLoop(d, n/2) 

Я проверю, чтобы убедиться, что ^^ работает, так как в данный момент я думаю, что это не так, но идея есть, просто разделите список и вызовите ту же функцию, чтобы разделить ее снова.