2013-03-08 2 views
1

나는이 같은 응용 프로그램으로 쉘 정렬 알고리즘을 구현 :쉘 정렬에서 영향을받는 값에 스타일을 추가 하시겠습니까?

shell: function() { 
    var list = anada.vars.$list; 
    for (i = 0; i < list.length; i++) { 
     list[i] = parseInt(list[i], 10); 
    } 
    var n = list.length; 
    var increment = Math.floor(n/2); 
    var i;   

    while (increment > 0) { 
     for (i = increment; i < n; i++) { 
      var temp = list[i]; 
      var j = i; 
      var affectedOne = j; 
      var affectedTwo; 
      while (j >= increment && list[j - increment] > temp) { 
       list[j] = list[j - increment]; 
       j -= increment; 
      } 
      list[j] = temp; 
      var rows = '<tr>'; 
      for (counter = 0; counter < n; counter++) { 
       if (counter > j - increment && counter < i + 1 && counter % increment == 0) { 
        rows += '<td class="affected">' + list[counter]; 
       } else { 
        rows += '<td>' + list[counter]; 
       } 
      } 
      anada.vars.$elements.push(rows); 
     } 
     increment = Math.floor(increment/2); 
     var row = '<tr>'; 
     $.each(list, function(n, val) { 
      row += '<td class="iteration">' + val; 
     }); 
     anada.vars.$elements.push(row); 

    } 
    $('.result-content').find('table').empty(); 
    $.each(anada.vars.$elements, function(n, val) { 
     $('.result-content').find('table').append(val); 
    }); 
    anada.vars.$elements = []; 

}, 

문제는 다음과 같이이다 :

  1. 전용 '21'가 있기 때문에 강조하지 않아야 정렬 하이라이트의 첫 번째 부분, 15 및 21 항목의 위치가 변경되지 않았습니다. 목록 항목은 15,14,03424421671253420입니다.

    첫번째 반복 : 인덱스 0 목록 + 1의 총 수의 절반, 그들은 위치를 변경할 것이다 인덱스 7보다 크면

페어링이고 15-21, 14-6, 0-7, 34-12, 2-5, 44-34, 내가 강조하고 싶은 6-20

는 w 만입니다 호스 위치가 변경됩니다.

first part of the sorting after some iterations, the ending part is like a insertion sort

내 실수 것입니다.

+3

문제에 대해 자세히 설명해 주시겠습니까? – Snippet

+0

아, 알겠습니다. .. –

답변

1

수학을 시도해 봅시다. 값 i은 요소를 거꾸로 교환하기 시작한 색인을 나타냅니다. 값 j은 해당 요소가 마침내 끝난 곳이며 increment은 단계 크기를 나타냅니다.

위치가 counter 인 요소를 고려하십시오. 그것은 다음의 모두에 해당하는 경우 이동 한 요소와 교환되었다

  • counterincrement의 배수의 앞으로 j에서 단계의 숫자입니다. 즉, counter >= j && counter - j % increment == 0입니다.

  • counter이 시작 지점을 지나지 않았습니다. 즉, counter <= i입니다.

  • 적어도 하나의 요소가 이동되었습니다. 즉, i != j입니다.

함께이 퍼팅이 조건을 얻을 수 :

if (i != j && counter <= i && counter >= j && counter - j % increment == 0) { 
    // Element was swapped 
} else { 
    // Element was not swapped 
} 

당신이 확인하고 조건이 하나 가깝지만 j시로 이동하는 일부 오프별로 한 오류 및 잊어을 가지고 모드를하고있어. 이것을 시도해보고 문제가 해결되는지 확인하십시오.

관련 문제