수의 크고 작음을 이용하여 순서를 정하는 것이다.
모든 값을 비교를 통해 순위를 정하는 것이다.
진 값을 index를 +1 올려준다.
결국 가장 큰 숫자는 0이 된다.
순위를 계산하는 절차를 순위 알고리즘이라고 한다.
import random
nums = random.sample(range(50, 101), 20)
ranks = [0 for i in range(20)] #길이가 20인 리스트를 만들 수 있다.
for idx, num1 in enumerate(nums):
for num2 in nums:
if num1 < num2:
ranks[idx] += 1
print(f'nums: {nums}')
print(f'ranks: {ranks}')
for idx, num in enumerate(nums):
print(f'nums: {num} \t rank: {ranks[idx] + 1}') # +1을 하는 이유 0부터 시작하기 때문에
실습
학급 학생(20명)들의 중간고사와 기말고사 성적을 이용해서 각각의 순위를 구하고, 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램을 만들어보자. (시험 성적은 난수를 이용)
main 코드
import copy
def bubbleSort(ns, deepCopy=True):
if deepCopy:
cns = copy.copy(ns) # 깊은복사
else:
cns = ns # 얕은복사
length = len(cns) - 1
for i in range(length):
for j in range(length - i):
if cns[j] > cns[j+1]:
cns[j], cns[j+1] = cns[j+1], cns[j]
return cns
import random as rd
import main as sm
students = []
for i in range(20):
students.append(rd.randint(170, 185))
print(f'students: {students}')
sortedStudents = sm.bubbleSort(students, deepCopy=False)
print(f'students: {students}')
print(f'sortedStudents: {sortedStudents}')
# 얕은 복사 : 변수 명만 다르고 똑같은 것을 사용하는 것
# 깊은 복사 : 새로운 데이터를 만들어 내는 것