버블 정렬 숙제


130

수업에서 우리는 정렬 알고리즘을하고 있는데, 그것들에 대해 이야기하고 의사 코드를 작성할 때 잘 알고 있지만 실제 코드를 작성하는 데 문제가 있습니다.

이것은 파이썬에서 시도한 것입니다.

mylist = [12, 5, 13, 8, 9, 65]

def bubble(badList):
    length = len(badList) - 1
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
            else:
                unsorted = True

print bubble(mylist)

이제, (내가 알 수있는 한) 올바르게 정렬되지만 일단 완료되면 무한정 반복됩니다.

이 코드를 어떻게 수정하여 함수가 올바르게 완료되고 (합리적인) 크기 목록을 올바르게 정렬합니까?

추신 : 나는 함수에서 실제로 인쇄를해서는 안되며 리턴을해야한다는 것을 알고 있지만 코드가 실제로 작동하지 않기 때문에 아직 그렇게하지 않았습니다.


29
@KM-잔디밭을 가져와야합니까?
Aiden Bell

123
게시물은 본질적으로 : "코딩에 문제가 있습니다. 이것이 제가 한 일이지만 작동하지 않습니다." 분명히 "누군가가 제게 몇 가지 조언을 해줄 수 있습니까?" 많은 숙제 질문과는 달리,이 질문은 (a) 잘 작성되어 있고, (b) 숙제에 대해 미리 설명하고, (c) 문제를 해결하기위한 좋은 시도를 포함합니다. 실제 물음표가 부족하다고 생각하지 않습니다.
John Fouhy

36
Bubble sort는 대부분의 사람들이 이해하기 가장 쉬운 정렬 알고리즘이기 때문에 학습 도구로 사용됩니다. 일반적으로 정렬 및 알고리즘에 대해 배우기에 좋은 진입 점입니다. 우리가 사람들이 실제로 사용할 것들만 가르쳤다면, 정렬에 대한 논의는 "라이브러리 정렬 루틴 사용"으로 시작하고 끝납니다.
Bill the Lizard

38
이 질문은 좋은 "숙제"질문을하는 방법에 대한 포스터입니다. John Fouhy의 요점에는 코드 샘플이 있으며 잘 작성되어 있으며 포스터는 우리가 쉽게 도울 수 있도록 노력하고 있습니다. 잘 했어, 조쉬 헌트
Jarret Hardie

20
Bubble sort는 사람들이 이해하기 쉬운 정렬 알고리즘 이 아닙니다 . 내 자신의 경험과 경험 교육 모두에서 나는 삽입 정렬, 선택 정렬, 최소 정렬 (최소 요소 정렬), 심지어 (일부 학생의 경우) 병합 정렬 및 퀵 정렬이 이해하기 쉽다고 확신 할 수 있습니다. 자연스럽게 목록을 정렬하는 방법이지만 버블 정렬은 인공적인 것입니다. 또한 거품 정렬은이 질문과 같이 많은 off-by-one 오류와 무한 루프 오류가 발생하기 쉽습니다. Knuth가 말했듯이, "거품 종류는 눈에 띄는 이름을 제외하고는 그것을 추천 할 것이 없다 ..."
ShreevatsaR

답변:


127

스크립트가 현재 작동하지 않는 이유를 설명하기 위해, 나는 변수의 이름을 바꿀 수 있습니다 unsortedsorted.

처음에는 목록이 아직 정렬되지 않았습니다. 물론로 설정 sorted했습니다 False.

while루프를 시작하자마자 목록이 이미 정렬되어 있다고 가정합니다. 아이디어는 이것입니다. 올바른 순서가 아닌 두 가지 요소를 찾으면 sorted다시로 설정 합니다 False. 잘못된 순서로 요소가없는 경우에만sorted 유지 True 됩니다 .

sorted = False  # We haven't started sorting yet

while not sorted:
    sorted = True  # Assume the list is now sorted
    for element in range(0, length):
        if badList[element] > badList[element + 1]:
            sorted = False  # We found two elements in the wrong order
            hold = badList[element + 1]
            badList[element + 1] = badList[element]
            badList[element] = hold
    # We went through the whole list. At this point, if there were no elements
    # in the wrong order, sorted is still True. Otherwise, it's false, and the
    # while loop executes again.

코드를보다 효율적으로 또는 읽을 수있게 해주는 사소한 문제도 있습니다.

  • 에서 for루프, 당신은 변수를 사용 element. 기술적으로 element는 요소가 아닙니다. 리스트 인덱스를 나타내는 숫자입니다. 또한 꽤 길다. 이 경우 i"index" 와 같은 임시 변수 이름 만 사용하십시오 .

    for i in range(0, length):
  • range명령은 하나의 인수 ( stop) 만 사용할 수도 있습니다 . 이 경우 0에서 해당 인수까지의 모든 정수 목록이 표시됩니다.

    for i in range(length):
  • 파이썬 스타일 가이드는 변수가 밑줄과 소문자로 명명하는 것이 좋습니다. 이것은 다음과 같은 작은 스크립트에 대한 아주 작은 nitpick입니다. 파이썬 코드와 가장 유사한 것에 익숙해지는 것이 더 좋습니다.

    def bubble(bad_list):
  • 두 변수의 값을 바꾸려면 튜플 할당으로 작성하십시오. 오른쪽은 튜플로 평가 된 다음 (예 : (badList[i+1], badList[i])is (3, 5)) 왼쪽의 두 변수에 할당됩니다 ( (badList[i], badList[i+1])).

    bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

모두 합치면 다음과 같이됩니다.

my_list = [12, 5, 13, 8, 9, 65]

def bubble(bad_list):
    length = len(bad_list) - 1
    sorted = False

    while not sorted:
        sorted = True
        for i in range(length):
            if bad_list[i] > bad_list[i+1]:
                sorted = False
                bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

bubble(my_list)
print my_list

(나는 당신의 인쇄 진술도 제거했습니다.)


1
마지막 코드에서 버블은 아무것도 반환하지 않으므로 최종 결과는 '없음'이 인쇄됩니다. 목록을 반환하거나 bubble (my_list)를 수행 한 다음 my_list를 인쇄 할 수 있습니다.
Tung Nguyen

9
+1 체계적이고 명확한 조언. 빠른 수정 사항을 작성하는 대신 독자가 수행 한 작업과 이유를 살펴 보는 것이 좋습니다.
Tom Leys

1
저는 C # 프로그래머이므로 파이썬을 얻지 못했기 때문에 발생할 수 있지만 일반적인 거품 정렬 알고리즘을 얻으려면 길이에서 1을 빼기 위해 while 루프에 무언가가 필요하지 않습니까?
Martin Brown

20
이것은 Bubble Sort의 순진하지만 잘못된 것은 아닙니다. while루프가 반복 될 때마다 가장 큰 요소가 목록의 끝까지 "거품"입니다. 따라서 한 번의 반복 후에 마지막 요소는 확실히 올바른 위치에 있으며 연속적인 반복으로 이동되지 않습니다. 길이에서 1을 빼면 아직 정렬되지 않은 하위 length-n목록 (목록의 가장 앞에있는 요소) 만 정렬하여 알고리즘을 최적화합니다 . 알고리즘의 중요한 부분보다 최적화 이므로이 최적화를 건너 뛰기로했습니다.
Wesley

2
Put it all together, and you get this:... 음, 당신은 이것을 놓쳤다 :The range command can also take just one argument (named stop).
Peter Perháč

10

버블 정렬의 목표는 각 라운드의 맨 아래에서 더 무거운 항목을 이동시키고 더 가벼운 항목을 위로 이동시키는 것입니다. 내부 루프에서 요소를 비교할 때 마다 매번 전체 목록을 반복 할 필요는 없습니다 . 무거운는 이미 지난 배치됩니다. 교환 우리는 목록이 이제 정렬됨을 표시하고 불필요한 계산을 계속 피할 수 있도록 변수는 추가 검사입니다.

def bubble(badList):
    length = len(badList)
    for i in range(0,length):
        swapped = False
        for element in range(0, length-i-1):
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                swapped = True
        if not swapped: break

    return badList

버전 1이 수정되었습니다.

def bubble(badList):
    length = len(badList) - 1
    unsorted = True
    while unsorted:
        unsorted = False
        for element in range(0,length):
            #unsorted = False
            if badList[element] > badList[element + 1]:
                 hold = badList[element + 1]
                 badList[element + 1] = badList[element]
                 badList[element] = hold
                 unsorted = True
                 #print badList
             #else:
                 #unsorted = True

     return badList

8

이것은 부정적인 의미의 변수 이름을 사용할 때 발생하며, 값을 반전시켜야합니다. 다음은 이해하기 쉬울 것입니다.

sorted = False
while not sorted:
    ...

반면에 알고리즘의 논리는 약간 벗어났습니다. for 루프 중에 두 요소가 서로 바뀌 었는지 확인해야합니다. 내가 쓰는 방법은 다음과 같습니다.

def bubble(values):
    length = len(values) - 1
    sorted = False
    while not sorted:
        sorted = True
        for element in range(0,length):
            if values[element] > values[element + 1]:
                 hold = values[element + 1]
                 values[element + 1] = values[element]
                 values[element] = hold
                 sorted = False
    return values

1
이 답변에 사용할 수있는 "WRONG"버튼이없는 것이 너무 나쁩니다. Joel Spolsky가 다음 번에 스택 오버플로에서 사회적 상호 작용을 얼마나 잘 조정했는지에 대해 이야기 할 때이 질문과 답변, 특히 투표가 등장해야한다고 생각합니다.
Daniel Martin

@Daniel : 당신은 충분한 평판 (100)을 가진 다른 사람들이 할 수있는 일을 할 수 있습니다-오답을 공감하십시오. 진실의 세균이 있습니다-플래그 변수에 숨겨진 부정 조건은 나쁩니다. @McWafflestix가 옳다고 생각합니다.
Jonathan Leffler

2
너희들이 맞아, 나는 이것에 대해 조기에 대답했다. 미안합니다.
Martin Cote

2
@Martin-그리고 나는 대답보다 투표에 더 놀랐다는 점을 지적해야합니다. 평판 시스템을 사용하면 첫 번째 답변을 즉시받을 수 있습니다. 깨진 부분은 잘못된 답변이 투표되는 방식입니다.
Daniel Martin

2
나는 대부분의 사람들이 (질문에 대답 한 방식과 마찬가지로) 질문을 실제로 이해하지 않고 투표한다고 생각합니다. 질문을하는 사람은 나중에 '올바른'답변을 선택할 수있는 특권이 있습니다.
Martin Cote

7

정렬되지 않은 변수 사용이 잘못되었습니다. 두 요소를 교체했는지 여부를 알려주는 변수가 필요합니다. 그렇게 한 경우 루프를 종료 할 수 있습니다. 그렇지 않으면 다시 루프해야합니다. 여기있는 것을 고치려면 if 케이스 본문에 "unsorted = false"를 넣으십시오. else 케이스를 제거하십시오. for루프 앞에 "unsorted = true"를 입력하십시오 .


5
def bubble_sort(l):
    for passes_left in range(len(l)-1, 0, -1):
        for index in range(passes_left):
            if l[index] < l[index + 1]:
               l[index], l[index + 1] = l[index + 1], l[index]
    return l

1
질문이 '버블 정렬이 무엇입니까?'가 아니라 '이 코드를 어떻게 수정할 수 있습니까?'
Josh Hunt

4
당신은 절대적으로 옳습니다. 그러나 올바른 방법으로하는 것이 더 중요합니다
mtasic85

6
아마도, 아마도 mtasic ...하지만 숙제로 태그 된 것은 다시 쓰지 않고 (특히 OP에 의해 숙제로 태그 될 때) 가장 유익하게 조정됩니다.
Jarret Hardie

1
이것은 대부분의 사람들이 공부하는 교과서 C 거품 정렬을 완벽하게 다시 씁니다. 나는 똑같이 썼다.
Lakshman Prasad 2016 년

2
좋은 정보를 추가하면 내 견해에 도움이됩니다. 그래서 좋은 답변 .. 당신은 가능한 한 빨리 휴식을 취하기 위해 플래그를 사용할 수 있다고 생각했습니다.
Grijesh Chauhan

3

# 두 번째 어레이의 문제 공간을 줄임으로써 매우 간단한 기능을 최적화 할 수 있습니다. 그러나 동일한 O (n ^ 2) 복잡성.

def bubble(arr):
    l = len(arr)        
    for a in range(l):
        for b in range(l-1):
            if (arr[a] < arr[b]):
            arr[a], arr[b] = arr[b], arr[a]
    return arr 

파이썬에서 값을 교환 할 수있는 방법은 조금 덜 복잡합니다. arr[a], arr[b] = arr[b], arr[a]
Makoto

1

거기에 몇 가지 오류가 있습니다. 첫 번째는 길이이고 두 번째는 정렬되지 않은 상태로 사용하는 것입니다 (McWafflestix에서 명시한대로). 인쇄하려는 경우 목록을 반환 할 수도 있습니다.

mylist = [12, 5, 13, 8, 9, 65]

def bubble(badList):
    length = len(badList) - 2
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False

            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
                unsorted = True

    return badList

print bubble(mylist)

eta : 당신 말이 맞아, 위의 지옥 같은 버그입니다. 더 많은 예제를 통해 테스트하지 않아서 나쁘다.

def bubble2(badList):
    swapped = True
    length = len(badList) - 2

    while swapped:
        swapped = False
        for i in range(0, length):
            if badList[i] > badList[i + 1]:

                # swap
                hold = badList[i + 1]
                badList[i + 1] = badList[i]
                badList[i] = hold

                swapped = True

    return badList

"unsorted = False"가 for 루프 외부에 있지 않아야합니까?
Svante

그것보다 약간 더 많은 문제가 있었다;)
Trevor Oke

1

나는 신선하고 신선한 초보자이며 어제 파이썬에 대해 읽기 시작했습니다. 당신의 예에서 영감을 얻어 80-ties 스타일로 더 많은 것을 만들었지 만 그럼에도 불구하고 다소 효과가 있습니다.

lista1 = [12, 5, 13, 8, 9, 65]

i=0
while i < len(lista1)-1:
    if lista1[i] > lista1[i+1]:
        x = lista1[i]
        lista1[i] = lista1[i+1]
        lista1[i+1] = x
        i=0
        continue
    else:
        i+=1

print(lista1)

1

원래 알고리즘의 문제점은 목록에서 숫자가 더 적 으면 올바른 정렬 위치로 가져 오지 않는다는 것입니다. 프로그램은 매번 처음으로 돌아가서 숫자가 완전히 정렬되도록해야합니다.

코드를 단순화했으며 이제는 목록에 관계없이 번호가 반복되는 경우에도 모든 숫자 목록에서 작동합니다. 코드는 다음과 같습니다

mylist = [9, 8, 5, 4, 12, 1, 7, 5, 2]
print mylist

def bubble(badList):
    length = len(badList) - 1
    element = 0
    while element < length:
        if badList[element] > badList[element + 1]:
            hold = badList[element + 1]
            badList[element + 1] = badList[element]
            badList[element] = hold
            element = 0
            print badList
        else:
            element = element + 1

print bubble(mylist)

1
def bubble_sort(l):
    exchanged = True
    iteration = 0
    n = len(l)

    while(exchanged):
        iteration += 1
        exchanged = False

        # Move the largest element to the end of the list
        for i in range(n-1):
            if l[i] > l[i+1]:
                exchanged = True
                l[i], l[i+1] = l[i+1], l[i]
        n -= 1   # Largest element already towards the end

    print 'Iterations: %s' %(iteration)
    return l

1
끝까지 큰 요소를 버블 링하십시오. 그리고 끝 카운터 "n"을 줄이면 다시 비교할 필요가 없습니다. 교환이있는 한 while 루프를 계속하십시오. 최악의 경우 : O (N ^ 2) 최상의 경우 : O (N)
Zile Rehman

1
def bubbleSort(alist):
if len(alist) <= 1:
    return alist
for i in range(0,len(alist)):
   print "i is :%d",i
   for j in range(0,i):
      print "j is:%d",j
      print "alist[i] is :%d, alist[j] is :%d"%(alist[i],alist[j])
      if alist[i] > alist[j]:
         alist[i],alist[j] = alist[j],alist[i]
return alist

alist = [54,26,93,17,77,31,44,55,20, -23, -34,16,11,11,11]

BubbleSort (alist) 인쇄


코드 샘플을 올바르게 들여 쓰십시오. 물론 이것은 파이썬에서 특히 중요합니다. 당신은 또한 당신의 해결책이 100 표로 된 답을 고려하는 것을 고려할 가치가있는 이유를 설명하고 싶을 수도 있습니다
kdopen

1
def bubble_sort(a):
    t = 0
    sorted = False # sorted = False because we have not began to sort
    while not sorted:
    sorted = True # Assume sorted = True first, it will switch only there is any change
        for key in range(1,len(a)):
            if a[key-1] > a[key]:
                sorted = False
                t = a[key-1]; a[key-1] = a[key]; a[key] = t;
    print a

1

더 간단한 예 :

a = len(alist)-1
while a > 0:
    for b in range(0,a):
        #compare with the adjacent element
        if alist[b]>=alist[b+1]:
            #swap both elements
            alist[b], alist[b+1] = alist[b+1], alist[b]
    a-=1

이것은 단순히 0에서 a까지의 요소 (기본적으로 해당 라운드의 정렬되지 않은 모든 요소)를 가져 와서 인접한 요소와 비교하고 인접한 요소보다 큰 경우 스왑을 만듭니다. 라운드가 끝나면 마지막 요소가 정렬되고 모든 요소가 정렬 될 때까지 프로세스가 다시 실행됩니다.

sort참이든 아니든 조건이 필요 하지 않습니다.

이 알고리즘은 교환 할 때만 숫자의 위치를 ​​고려하므로 반복되는 숫자는 영향을 미치지 않습니다.

추신. 이 질문이 게시 된 지 매우 오래 걸렸지 만이 아이디어를 공유하고 싶었습니다.


1
arr = [5,4,3,1,6,8,10,9] # array not sorted

for i in range(len(arr)):
    for j in range(i, len(arr)):
        if(arr[i] > arr[j]):
            arr[i], arr[j] = arr[j], arr[i]

            print (arr)

0
def bubble_sort(li):
    l = len(li)
    tmp = None
    sorted_l = sorted(li)
    while (li != sorted_l):
        for ele in range(0,l-1):
            if li[ele] > li[ele+1]:
                tmp = li[ele+1]
                li[ele+1] = li [ele]
                li[ele] = tmp
    return li

0
def bubbleSort ( arr ):
    swapped = True 
    length = len ( arr )
    j = 0

    while swapped:
        swapped = False
        j += 1 
        for i in range ( length  - j ):
            if arr [ i ] > arr [ i + 1 ]:
                # swap
                tmp = arr [ i ]
                arr [ i ] = arr [ i + 1]
                arr [ i + 1 ] = tmp 

                swapped = True

if __name__ == '__main__':
    # test list
    a = [ 67, 45, 39, -1, -5, -44 ];

    print ( a )
    bubbleSort ( a )
    print ( a )

0
def bubblesort(array):
    for i in range(len(array)-1):
        for j in range(len(array)-1-i):
            if array[j] > array[j+1]:
                array[j], array[j+1] = array[j+1], array[j]
    return(array)

print(bubblesort([3,1,6,2,5,4]))

1
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유 에 대한 추가 컨텍스트를 제공 하면 답변의 장기적인 가치가 향상됩니다.
Alexander

0

여기에 솔루션이 있기 때문에 솔루션을 추가하는 것을 고려하십시오.

  1. 더 큰 시간
  2. 더 큰 공간 복잡성
  3. 또는 너무 많은 작업을 수행

그렇다면

그래서, 여기 내 해결책이 있습니다 :


def countInversions(arr):
    count = 0
    n = len(arr)
    for i in range(n):
        _count = count
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                count += 1
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
        if _count == count:
            break
    return count

0

리스트 이해를 사용하여 더 짧은 구현에 관심이있는 사람 :

def bubble_sort(lst: list) -> None:
    [swap_items(lst, i, i+1) for left in range(len(lst)-1, 0, -1) for i in range(left) if lst[i] > lst[i+1]]


def swap_items(lst: list, pos1: int, pos2: int) -> None:
    lst[pos1], lst[pos2] = lst[pos2], lst[pos1]

0

다음은 for루프가 없는 버블 정렬의 다른 변형입니다 . 기본적으로 당신은 고려 lastIndex의를 array천천히 decrementing그 배열의 그 첫 번째 인덱스까지.

algorithm전체 패스 임의없이 이루어질 때까지 이런 배열을 통해 이동하는 것 swaps발생.

기포는 일종의 Quadratic Time: O(n²)성능에 관한 것입니다.

class BubbleSort: 
  def __init__(self, arr):
    self.arr = arr;

  def bubbleSort(self):
    count = 0;
    lastIndex = len(self.arr) - 1;
    
    while(count < lastIndex):
      if(self.arr[count] > self.arr[count + 1]):
        self.swap(count)  
      count = count + 1;

      if(count == lastIndex):
        count = 0;
        lastIndex = lastIndex - 1;   

  def swap(self, count):
    temp = self.arr[count];
    self.arr[count] = self.arr[count + 1];
    self.arr[count + 1] = temp;
    
arr = [9, 1, 5, 3, 8, 2]
p1 = BubbleSort(arr)

print(p1.bubbleSort())

-1

The Fury와 Martin Cote가 제공 한 답변은 무한 루프의 문제를 해결했지만 내 코드는 여전히 올바르게 작동하지 않습니다 (더 큰 목록의 경우 올바르게 정렬되지 않습니다). unsorted변수 를 버리고 카운터를 대신 사용했습니다.

def bubble(badList):
    length = len(badList) - 1
    n = 0
    while n < len(badList):
        for element in range(0,length):
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                n = 0
            else:
                n += 1
    return badList

if __name__ == '__main__':
    mylist = [90, 10, 2, 76, 17, 66, 57, 23, 57, 99]
    print bubble(mylist)

의견에서 내 코드를 개선하는 방법에 대한 포인터를 누구나 제공 할 수 있다면 대단히 감사하겠습니다.


(이전 반복으로 인해) 이미 정렬 된 목록 부분을 건너 뛰어 버블 정렬 속도를 높일 수 있습니다. en.wikipedia.org/wiki/Bubble_sort#Alternative_implementations
Blorgbeard는

3
다시 한 번, 부울을 사용하면됩니다 (손대지 않은 상태로 호출). 루프 외부에서 선언하십시오. 손대지 않을 때까지 반복 = true. while 루프 내에서 untouched를 true로 설정하십시오. if의 본문에서 untouched를 false로 설정하십시오. 이렇게하면 else 케이스를 버릴 수 있습니다. 이런 식으로 두 요소를 전환하면 루프가 계속됩니다. 그렇지 않으면 루프가되지 않습니다.
Paul Sonier

-1

이 시도

a = int(input("Enter Limit"))


val = []

for z in range(0,a):
    b = int(input("Enter Number in List"))
    val.append(b)


for y in range(0,len(val)):
   for x in range(0,len(val)-1):
       if val[x]>val[x+1]:
           t = val[x]
           val[x] = val[x+1]
           val[x+1] = t

print(val)

-1

9 년 후 도움이 될 경우 idk ... 간단한 버블 정렬 프로그램

    l=[1,6,3,7,5,9,8,2,4,10]

    for i in range(1,len(l)):
        for j in range (i+1,len(l)):
            if l[i]>l[j]:
                l[i],l[j]=l[j],l[i]

-1
def merge_bubble(arr):
    k = len(arr)
    while k>2:
        for i in range(0,k-1):
            for j in range(0,k-1):
                if arr[j] > arr[j+1]:
                    arr[j],arr[j+1] = arr[j+1],arr[j]

        return arr
        break
    else:
        if arr[0] > arr[1]:
            arr[0],arr[1] = arr[1],arr[0]
        return arr 

-1
def bubble_sort(l):
    for i in range(len(l) -1):
        for j in range(len(l)-i-1):
            if l[j] > l[j+1]:
                l[j],l[j+1] = l[j+1], l[j]
    return l

코드에 설명을 추가하는 것이 좋습니다.
Masoud Rahimi

-1
def bubble_sorted(arr:list):
    while True:
        for i in range(0,len(arr)-1):
            count = 0
            if arr[i] > arr[i+1]:
                count += 1
                arr[i], arr[i+1] = arr[i+1], arr[i]
        if count == 0:
            break
    return arr
arr = [30,20,80,40,50,10,60,70,90]
print(bubble_sorted(arr))
#[20, 30, 40, 50, 10, 60, 70, 80, 90]

-3

def bubbleSort(a): def swap(x, y): temp = a[x] a[x] = a[y] a[y] = temp #outer loop for j in range(len(a)): #slicing to the center, inner loop, python style for i in range(j, len(a) - j):
#find the min index and swap if a[i] < a[j]: swap(j, i) #find the max index and swap if a[i] > a[len(a) - j - 1]: swap(len(a) - j - 1, i) return a

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.