버블정렬(Bubble Sort)

정은경·2020년 1월 7일
0

문제

  • 버블정렬(Bubble Sort)
    버블 정렬은 인접한 데이터를 교환해서 정렬하는 알고리즘입니다.
    알고리즘의 정렬되는 모습이 마치 거품처럼 보인다고 해서 붙여진 이름입니다.아래 그림을 한 번 봐주세요.
    아마 바로 이해되실 것입니다.

인접한 두 수를 비교하여 더 큰 것을 우측으로 계속 이동시키면 됩니다.
idex 0 <-> 1 부터 교환하기 시작합니다.
6 5 3 2 8
-> 5 6 3 2 8

그 다음은 index 1 <-> 2
5 6 3 2 8
-> 5 3 6 2 8

그 다음은 index 2 <-> 3
5 3 6 2 8
-> 5 3 2 6 8

그 다음은 index 3 <-> 4:
5 3 2 6 8
-> 5 3 2 6 8
이렇게 제일 마지막 두 수 까지 비교하면, 제일 큰 수가 제일 마지막 index에 위치하는 것을 알 수 있습니다.

다시 처음부터 시작합니다.
5 3 2 6 8
-> 3 5 2 6 8

3 5 2 6 8
-> 3 2 5 6 8

3 2 5 6 8
-> 3 2 5 6 8
이번 교환에는 index 2까지 비교하고 멈추면 됩니다.
마지막 index는 이미 제일 큰 수가 정렬된 상태이기 때문입니다.

이런식으로 계속 비교하고 교체하면 됩니다.!

  • 코드카타

nums라는 배열을 주면, 버블정렬 알고리즘으로 배열을 정렬해주세요.

나의 풀이

def bubbleSort(arr):
  j = 1;
  temp = arr;
  max = arr[0]
  min = arr[0]
  num = 0;
  count = 1;
  
  while(num < count):
    j = 1;
    while (j<len(arr)):
      #print(j-1,j)
      #print(str(j-1)+"/"+str(j))
      #print(str(arr[j])+"/"+str(arr[j-1]))
      if(temp[j-1] > temp[j]):
        swap      = temp[j]
        temp[j] = temp[j-1]
        temp[j-1]   = swap
        count +=1
      #print(temp)
      j+=1
    num +=1
  print("="*10)
  print(temp)
  return temp

bubbleSort([3,1,5,6,2,4,7,8])

모법답안

def bubbleSort(arr):
  n = len(arr)
 
  for i in range(n):
 
    # 마지막 i번째는 이미 큰 수로 정렬된 상태니까 그 전까지
    for j in range(0, n-i-1):
      if arr[j] > arr[j+1] :
        arr[j], arr[j+1] = arr[j+1], arr[j]
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글