並び替えに関する問題です. アルゴリズムについて詳しく知りたい方は参考文献などをご覧ください.
# ALDS1_2_A
def bubble_sort(A,N):
flag = 1
cnt = 0 # 要素の交換が行われた回数
while flag:
flag = 0
for j in range(N-1):
j = N-1-j # 逆順なので j = N-1-j
if A[j] < A[j-1]:
# A[j]とA[j-1]の交換
tmp = A[j]
A[j] = A[j-1]
A[j-1] = tmp
flag = 1
cnt += 1
return cnt
N = int(input())
A = list(map(int,input().split(" ")))
swap_cnt = bubble_sort(A,N)
print(*A)
print(swap_cnt)
# ALDS1_2_B
def selection_sort(A,N):
cnt = 0
for i in range(N):
minj = i
for j in range(i,N):
if A[j] < A[minj]:
minj = j
if i != minj:
tmp = A[i]
A[i] = A[minj]
A[minj] = tmp
cnt += 1 # 交換が行われた回数をカウントする
return cnt
N = int(input())
A = list(map(int,input().split(" ")))
swap_cnt = selection_sort(A,N)
print(*A)
print(swap_cnt)
# ALDS1_2_C
def bubble_sort(A,N):
flag = 1
cnt = 0 # 要素の交換が行われた回数
while flag:
flag = 0
for j in range(N-1):
j = N-1-j # 逆順なので j = N-1-j
# トランプ仕様に変更した
value0 = int(A[j][1:])
value1 = int(A[j-1][1:])
if value0 < value1:
# A[j]とA[j-1]の交換
tmp = A[j]
A[j] = A[j-1]
A[j-1] = tmp
flag = 1
cnt += 1
return cnt
def selection_sort(A,N):
cnt = 0
for i in range(N):
minj = i
for j in range(i,N):
# トランプ仕様に変更した
value0 = int(A[j][1:])
value1 = int(A[minj][1:])
if value0 < value1:
minj = j
if i != minj:
tmp = A[i]
A[i] = A[minj]
A[minj] = tmp
cnt += 1 # 交換が行われた回数をカウントする
return cnt
N = int(input())
A = input().split(" ")
bubble_A = A[:]
bubble_sort(bubble_A,N)
print(*bubble_A)
# バブルソートは安定なソートであるので Stable
print("Stable")
selection_sort(A,N)
print(*A)
# 選択ソートが安定かどうかはバブルソートの結果と一致するかを調べればいい
if bubble_A == A:
print("Stable")
else:
print("Not stable")
# ALDS1_2_D
cnt = 0
# 挿入ソート
def insertion_sort(A,n,g):
global cnt
for i in range(g,n):
v = A[i]
j = i-g
while j >= 0 and A[j]> v:
A[j+g] = A[j]
j = j-g
cnt += 1
A[j+g] = v
# シェルソート
def shell_sort(A,n):
global cnt
cnt = 0
G = [1]
for i in range(2,n):
if (3**i-1)//2 > n:
break
G.append((3**i-1)//2)
G.sort(reverse=True)
for i in range(len(G)):
insertion_sort(A,n,G[i])
return G
N = int(input())
# 並べ替えるリストを受け取る
A = []
for i in range(N):
num = int(input())
A.append(num)
G = shell_sort(A,N)
print(len(G)) # Gの長さ
print(*G) # Gの要素
print(cnt) # 入れ替えの回数
# 並べ替え後の要素
for a in A:
print(a)