Python pętle
Mariusz:
def heapify(A,idx,max):
left=2*idx+1;
right=2*idx+2;
if((left<max)and(A[left]>A[idx])):
largest=left;
else:
largest=idx;
if((right<max)and(A[right]>A[largest])):
largest=right;
if(largest!=idx):
temp=A[idx];
A[idx]=A[largest];
A[largest]=temp;
heapify(A,largest,max);
def buildHeap(A):
n=len(A);
i=n/2−1;
while(i>=0):
heapify(A,i,n);
i−=1;
def heapSort(A):
buildHeap(A);
n=len(A);
i=n−1;
while(i>=1):
temp=A[0];
A[0]=A[i];
A[i]=temp;
heapify(A,0,i);
i−=1;
from random import sample;
A=sample(range(1,100),10);
print A;
heapSort(A);
print A;
Jak zamienić te pętle while na pętle for
11 gru 16:54
jc: Nie zamieniaj. Przy okazji, średniki są niepotrzebne i za to lubię Pythona.
A powyższy tekst nauczył mnie jak wygenerować losową tablicę (listę):
from random import sample
sample(range(1,100),10)
11 gru 17:23
Mariusz:
Sortowanie przez scalanie napisałem w ten sposób
Podobnie jak poprzednio na podstawie pseudokodu Cormena
def merge(A,p,q,r):
n1=q−p+1;
n2=r−q;
B=[];
for i in range(p,r+1):
B.append(A[i]);
i=0;
j=n1;
k=p;
while((i<n1) and (j<n1+n2)):
if(B[i]<=B[j]):
A[k]=B[i];
i+=1;
else:
A[k]=B[j];
j+=1;
k+=1;
while(i<n1):
A[k]=B[i];
i+=1;
k+=1;
while(j<n1+n2):
A[k]=B[j];
j+=1;
k+=1;
def mergesort(A,p,r):
if(p<r):
q=(p+r)/2;
mergesort(A,p,q);
mergesort(A,q+1,r);
merge(A,p,q,r);
Jak w Pythonie uzyskać czas działania kodu
11 gru 17:42