2017-01-31 22:25:59 +01:00
|
|
|
|
2017-01-31 22:23:15 +01:00
|
|
|
from random import randint
|
|
|
|
|
|
|
|
|
|
n = 42
|
|
|
|
|
a = [0] * n
|
|
|
|
|
|
2017-01-31 23:58:43 +01:00
|
|
|
### On remplit le tableau "a"
|
|
|
|
|
|
2017-01-31 22:23:15 +01:00
|
|
|
for i in range(0, len(a)):
|
|
|
|
|
a[i] = randint(0, 100)
|
|
|
|
|
|
2017-01-31 22:29:40 +01:00
|
|
|
print(a)
|
|
|
|
|
|
2017-01-31 23:58:43 +01:00
|
|
|
### Et maintenant on le trie
|
|
|
|
|
|
2017-01-31 22:23:15 +01:00
|
|
|
m = 1
|
|
|
|
|
while m < len(a):
|
2017-01-31 22:35:25 +01:00
|
|
|
#@ invariant 1 <= m <= len(a)
|
2017-01-31 22:23:15 +01:00
|
|
|
#@ invariant forall i,j. 0 <= i <= j < m -> a[i] <= a[j]
|
2017-01-31 22:35:25 +01:00
|
|
|
#@ variant len(a) - m
|
2017-01-31 22:23:15 +01:00
|
|
|
x = a[m]
|
|
|
|
|
k = m
|
|
|
|
|
while k > 0 and a[k-1] > x:
|
|
|
|
|
#@ invariant 0 <= k <= m
|
2017-01-31 22:25:59 +01:00
|
|
|
#@ invariant forall i,j. 0 <= i <= j < k -> a[i] <= a[j]
|
|
|
|
|
#@ invariant forall i,j. 0 <= i < k < j <= m -> a[i] <= a[j]
|
|
|
|
|
#@ invariant forall i,j. k < i <= j <= m -> a[i] <= a[j]
|
2017-01-31 23:58:43 +01:00
|
|
|
#@ invariant forall j. k < j <= m -> x < a[j]
|
2017-01-31 22:35:25 +01:00
|
|
|
#@ variant k
|
2017-01-31 22:23:15 +01:00
|
|
|
a[k] = a[k-1]
|
|
|
|
|
k = k - 1
|
|
|
|
|
a[k] = x
|
|
|
|
|
m = m + 1
|
|
|
|
|
|
|
|
|
|
#@ assert forall i,j. 0 <= i <= j < len(a) -> a[i] <= a[j]
|
|
|
|
|
|
2017-01-31 22:29:40 +01:00
|
|
|
print(a)
|
2017-01-31 22:23:15 +01:00
|
|
|
|