[알고리즘] 002_정렬 & 순서 (순위)

Soo·2023년 8월 24일
0

✏️ 정렬

💡 버블정렬

  • 처음부터 끝까지 인접하는 인덱스 벨류 값을 순차적으로 비교하면서 큰 숫자를 옮기는 알고리즘
nums=[10,2,7,21,0]
length=len(nums)-1   # 마지막 인덱스 값 : 4
for i in range (length):
	for j in range(length - i) : #j 인덱스 위치 & (j+1) 인덱스 우치 비교하기 위해 j 로 미지수 지정
    	if nums[j]>nums[j-1]:
        	nums[j], nums[j-1] = nums[j-1],nums[j]   # 앞 뒤 순서를 바꾸는 양식

💡 삽입정렬

  • 정렬되어 있는 자료 배열과 비교해서, 정렬 위치를 찾음
nums=[5,10,2,1,0]
for i1 in range(1,len(nums)) :
	i2 = i1 -1  # i1 앞자리
    cNums = nums[i1]
    
    while nums[i2] > cNum and i2 >= 0 :
    nums[i2+1]= nums [i2]
    i2 -= 1
    
    nums[i2+1] = cNum
    
    print(nums)

💡 선택정렬

  • 주어진 리스트 중에서 최소값을 찾아, 그 값을 맨 앞 값과 교체하는 방식으로 자료 정렬
nums=[4,2,5,1,3]

# '선택 정렬'을 하기 위해 중첩 for문을 사용함
for i in range(lem(nums)-1) :
	midIdx = i
    
    # 최소값을 찾기 위한 for 문
    for j in ragne(i+1, len(nums)):
    	if nums[minIdx] > nums[j]:
        	minIdx = j
            
     temNum = nums[i]
     nums[i] = nums[minIdx]
     nums[minIdx] = temNum
     
 print(nums)
  • 선택정렬로 최소값과 최대값 찾기
# def sorNumber(ns, asc=True) :   # ns만 넣을 값 즉, 매개변수

	# 오름차순 정렬
	if asc :   #asc(상승)= True로 지정
    	for i in range(len(ns)-1) :
        	minIdx = i
            
            for j in range(i+1, len(ns)) :
            	if ns[midIdx] > ns[j] :
                	minIdx=j
            
            # 순서 바꾸기
            ns[i], ns[minIdx] = ns[minIdx], ns[i]
            
     # 내림차순 정렬
     else :   # 'asc=False'일 경우,
     	for i in range(len(ns)-1) :
        	minIdx = i
            
            for j in range(i+1, len(ns)) :
            	if ns[midIdx] < ns[j] :   # 재활용한 코드에다가 부등호만 반대로
                	minIdx=j
            
            # 순서 바꾸기
            ns[i], ns[minIdx] = ns[minIdx], ns[i]
  • 얕은 복사, 깊은 복사

    • 얕은 복사 : 변수명은 그대로 사용하나 앞에서 설정들이 바뀌면 복사된 내용도 그대로 반여됨

    • 깊은 복사 : 초기 원본 그대로 복사

      		import copy
      
      		# 깊은 복사
      		copy.deepcopy(카피할 변수명)

✏️ 순위

  • 크고 작음을 통해 수의 순서를 정하는 것
profile
데린이인데요 ໒꒰ྀ ˶ • ༝ •˶ ꒱ྀིა (잘못 된 부분은 너그러이 알려주세요.)

0개의 댓글

관련 채용 정보