2017-11-27 12 views
-1

다음 오류가있는 코드를 가지고 있지만 그렇지 않으면 삽입 정렬이라고 생각하는 코드를 수행합니다. 질문이 두 개 있습니다. 1.이 작업을 실행할 때 인덱스 오류가 발생하는 이유는 무엇입니까? 2. 교육 및 학습 목적으로 for 루프를 통합하여 전체 코드를 단순화하려면 어떻게해야합니까? 누군가가 반복되는 장소와 루프를 사용하는 솔루션에 어떻게 대응하는지 설명해달라고합니다. * i와 j를 사용하여 중첩 루프를 사용해야한다는 것을 알고 있지만 어떻게 처리 할 수는 없습니다. 루프의 길이에 i를 제공하는 외부 레벨 루프를 추가했습니다.효과적인 반복을 통합하기 위해 if 문을 사용하는 알고리즘의 단순화

코드 :

def main(): 
    #test with 6125 
    #test with 0142 
    #test with 4312 
    #test with 5432 

    list=[4,2,6,1] 
    print(list) 
    for i in range(len(list)): 
    #checking first element 
    if list[i+1]<list[i]: 
     temp1=list[i] 
     list[i]=list[i+1] 
     list[i+1]=temp1 
     print("first iteration:",list) 
    #Checking second element 
    if list[i+2]<list[i]: 
     temp1=list[i] 
     list[i]=list[i+2] 
     list[i+2]=temp1 
     print("second iteration:",list) 

    if list[i+2]>list[i]: 
     if list[i+2]<list[i+1]: 
     temp2=list[i+1] 
     list[i+1]=list[i+2] 
     list[i+2]=temp2 
     print("second iteration else #1:",list) 
    #Checking Third element 
    if list[i+3]<list[i]: 
     temp1=list[i] 
     temp2=list[i+1] 
     temp3=list[i+2] 
     list[i]=list[i+3] 
     list[i+1]=temp1 
     list[i+2]=temp2 
     list[i+3]=temp3 

     print("third iteration:",list) 
    elif list[i+3]>list[i]: 
     if list[i+3]<list[i+1]: 
     temp1=list[i+1] 
     temp2=list[i+2] 
     temp3=list[i+3] 
     list[i+1]=temp2 
     list[i+2]=temp3 
     list[i+3]=temp1 
     print("third iteration else #1:",list) 
     elif list[i+3]>list[i+1]: 
     if list[i+3]<list[i+2]: 
      temp3=list[i+2] 
      list[i+2]=list[i+3] 
      list[i+3]=temp3 
      print("third iteration else #2!",list) 
main() 

출력 # 1 :

#Test with [4, 2, 6, 1] 
('first iteration:', [2, 4, 6, 1]) 
('third iteration:', [1, 2, 4, 6]) 
**IndexError:** list index out of range on line 54 in main.py 

출력 테스트 # 2

#Test with [5, 4, 3, 2] 
('first iteration:', [4, 5, 3, 2]) 
('second iteration:', [3, 5, 4, 2]) 
('second iteration else #1:', [3, 4, 5, 2]) 
('third iteration:', [2, 3, 4, 5]) 

코드에 대한 장신구https://trinket.io/python/fb5116c1ed

주 (온라인 수정을 위해) 여기에서 찾을 수 있습니다 : 나는 파이썬 임시 변수를 사용하지 않고이 작업을 수행 할 수 있습니다 실현,하지만 난 그들을 사용하여 솔루션을 구현하고 싶습니다. 모든 답변에 기존의 코드와 제공된 코드를 사용하십시오.

답변

0

가장 바깥 쪽 for 루프가 혼란스럽고 문제가 발생합니다. 목록의 네 요소를 명시 적으로 반복하여 필요한 모든 검사를 수행합니다. 그러나 다음 증가 i, 4까지의 요소가 1의 과정을 반복하려고 - 6.

통해 5를 통해 결국 2, 3 당신은 3 과거의 어떤 요소를 가지고 있지 않다면, 그건 당신의 오류. 그 루프를 제거하기 만하면 될 것 같습니다.

i을 0으로 유지하면서 루프를 비활성화했으며 작성한 프로그램이 제대로 실행됩니다.