arr = [21,14,30,45,1]
rank = [1] * 5
for i in range(len(arr)):
for j in range(len(arr)):
if arr[i] < arr[j]:
rank[i] += 1
정수 X, Y 가 주어졌을 때 X 와 Y 의 최대공약수는 Y 와 X 를 Y 로 나눈 나머지 R 의 최대 공약수와 같다.
def euclidean(x, y):
print(y)
if y == 0:
return x
r = x % y
return euclidean(y, r)
arr = [8, 2, 1, 5, 9, 7]
buckets = [-1 for i in range(max(arr)+1)]
sorted_arr = []
for i in range(len(arr)):
val = arr[i]
buckets[val] = val
for num in buckets:
if num != -1:
sorted_arr.append(num)
import math
nums = [123, 602, 82, 777, 57, 510, 396, 196, 843, 138]
class RadixSort:
def __init__(self):
self.array= []
# 최대 자리수 구하기
def findMaxDigit(self, arr):
maxNum = max(arr)
return int(math.log10(maxNum)) + 1 if maxNum else 0
# 해당 자릿수의 값 구하기 ex. 512의 첫 번째 자릿수는 2
def getDigitNum(self, digit, num):
return (num // (10 ** (digit - 1))) % 10
def radixSort(self, arr):
# nums 안에 있는 모든 숫자가 10진수라는 가정하에
self.array = arr
maxDigit = self.findMaxDigit(self.array)
for i in range(maxDigit):
buckets = [[] for i in range(10)]
for j in range(len(self.array)):
digitNum = self.getDigitNum(i+1, self.array[j])
buckets[digitNum].append(self.array[j])
self.unfoldArr(buckets)
# 2차원 배열을 1차원 배열로
def unfoldArr(self, arr):
tempArr = sum(arr, [])
self.array = tempArr
RadixSort().radixSort(nums)