2010-12-14 2 views
1

C#에서 ShellSort를 사용하여 배열을 정렬하는 쉬운 방법이 필요합니다. 도와주세요.classwork - shellsort in C#?

+0

참조를 참조하십시오 : [자바 구현은] (http://stackoverflow.com/questions/12767588/time-complexity-for-shell-sort) – nawfal

답변

10

셸 정렬을 사용하십시오.

+4

난 그냥 거의 죽음 : –

+0

에 숨 막혀 gr8 질문에 대한 답변 : – TalentTuner

+0

DoYourOwnHomework와 Arthur는이 질문을했을 때 둘 다 1 위를 차지했습니다. 그러나 DoYourOwnHomework는 정말로 담당자를 꽉꽉 채웠습니다! –

8

코드를 작성하는 사람은 아무도 없습니다. 너는 배울 것이있어. 나는 다음과 같은 조치를 취할 것 :

  1. 이동을 Wikipedia's Shell Sort Page

  2. 에 알고리즘에 대한 psuedocode을 찾습니다. 그것이 무엇을 이해할 때까지 읽으십시오.

  3. psuedocode를 C#으로 포트하십시오.

  4. 구현하는 동안 문제가 있으면 언제든지 다시 질문하고 구체적인 질문을하십시오.

+4

4. 구현 중에 문제가 있으면 언제든지 다시 질문하고 구체적인 질문을하십시오. – Donnie

+0

5. 슬프게도, 그래서, 누군가 그를 위해 코드를 작성하려고합니다 ... –

0
public static int[] shellSort(int[] ar) 
    { 
     //this gaps array works but is not unique 
     int[] gaps = new int[] { 1, 4, 10, 23, 57, 132, 301, 701 }; 
     gaps = gaps.Reverse().ToArray(); 

     Func<int, int, bool> potentialSwitch = (ind1, ind2) => 
     { 
      if (ar[ind2] < ar[ind1]) 
      { 
       int temp = ar[ind2]; 
       ar[ind2] = ar[ind1]; 
       ar[ind1] = temp; 
       return true; 
      } 
      return false; 
     }; 

     foreach (int gap in gaps) 
     { 
      if (gap >= ar.Length) 
       continue; 

      for (int i = 0; i + gap < ar.Length; i++) 
      { 
       int j = i; 
       while (potentialSwitch(j, j + gap)) 
       { 
        j -= gap; 
        if (j < 0) 
         break; 
       } 
      } 
     } 

     return ar; 
    }