JAVA 정렬 알고리즘 구현 코드-힐 셸 정렬


JAVA 정렬 알고리즘 구현 코드-힐 셸 정렬
/** 
 * JAVA 정렬 알고리즘 구현 코드-힐 셸 정렬. 
 *  
 * @author 노 자 죽 JAVA 세기 망(java 2000.net) 
 *  
 */  
public class Test {  
  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 미리 설 정 된 데이터 배열  
  
  public static void main(String args[]) {  
    int i; // 순환 계수 변수  
    int Index = a.length;// 데이터 인덱스 변수  
  
    System.out.print("정렬 전: ");  
    for (i = 0; i < Index - 1; i++)  
      System.out.printf("%3s ", a[i]);  
    System.out.println("");  
  
    ShellSort(Index - 1); // 정렬 선택  
    // 정렬 후 결과  
    System.out.print("정렬 후: ");  
    for (i = 0; i < Index - 1; i++)  
      System.out.printf("%3s ", a[i]);  
    System.out.println("");  
  }  
  
  public static void ShellSort(int Index) {  
    int i, j, k; // 순환 계수 변수  
    int Temp; // 임시 저장 변수  
    boolean Change; // 데이터 변경 여부  
    int DataLength; // 분할 집합 간격 길이  
    int Pointer; // 처리 위치  
  
    DataLength = (int) Index / 2; // 초기 집합 간격 길이  
  
    while (DataLength != 0) // 수열 은 여전히 분할 할 수 있다.  
    {  
      // 각 집합 을 처리 하 다  
      for (j = DataLength; j < Index; j++) {  
        Change = false;  
        Temp = a[j]; // 데이터[j]의 값 을 임시 저장 하고 교환 할 때 사용 합 니 다.  
        Pointer = j - DataLength; // 처리 할 위 치 를 계산 하 다  
  
        // 집합 내 수치의 비교 와 교환 값 을 진행 하 다  
        while (Temp < a[Pointer] && Pointer >= 0 && Pointer <= Index) {  
          a[Pointer + DataLength] = a[Pointer];  
          // 다음 처리 할 위 치 를 계산 하 다.  
          Pointer = Pointer - DataLength;  
          Change = true;  
          if (Pointer < 0 || Pointer > Index)  
            break;  
        }  
        // 마지막 수치 와 교환  
        a[Pointer + DataLength] = Temp;  
  
        if (Change) {  
          // 현재 정렬 결과 인쇄  
          System.out.print("정렬 중: ");  
          for (k = 0; k < Index; k++)  
            System.out.printf("%3s ", a[k]);  
          System.out.println("");  
        }  
      }  
      DataLength = DataLength / 2; // 다음 분할 의 간격 길 이 를 계산 합 니 다.  
    }  
  }  
}  
/**
 * JAVA        -  Shell  。
 * 
 * @author     JAVA   (java2000.net)
 * 
 */
public class Test {
  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; //       

  public static void main(String args[]) {
    int i; //       
    int Index = a.length;//       

    System.out.print("   : ");
    for (i = 0; i < Index - 1; i++)
      System.out.printf("%3s ", a[i]);
    System.out.println("");

    ShellSort(Index - 1); //     
    //      
    System.out.print("   : ");
    for (i = 0; i < Index - 1; i++)
      System.out.printf("%3s ", a[i]);
    System.out.println("");
  }

  public static void ShellSort(int Index) {
    int i, j, k; //       
    int Temp; //     
    boolean Change; //       
    int DataLength; //          
    int Pointer; //        

    DataLength = (int) Index / 2; //         

    while (DataLength != 0) //         
    {
      //          
      for (j = DataLength; j < Index; j++) {
        Change = false;
        Temp = a[j]; //   Data[j]  ,      
        Pointer = j - DataLength; //          

        //               
        while (Temp < a[Pointer] && Pointer >= 0 && Pointer <= Index) {
          a[Pointer + DataLength] = a[Pointer];
          //              
          Pointer = Pointer - DataLength;
          Change = true;
          if (Pointer < 0 || Pointer > Index)
            break;
        }
        //         
        a[Pointer + DataLength] = Temp;

        if (Change) {
          //         
          System.out.print("   : ");
          for (k = 0; k < Index; k++)
            System.out.printf("%3s ", a[k]);
          System.out.println("");
        }
      }
      DataLength = DataLength / 2; //            
    }
  }
}

실행 결과
정렬 전:10 32 1 9 5 7 12 0 4
정렬 중:5 32 1 9 10 7 12 0 4
정렬 중:5,7,1,9,10,32,12,0,4
정렬 중:5,7,1,0,10,32,12,9,4
정렬 중:4,7,1,0,5,32,12,9,10
정렬 중:1,7,4,0,5,32,12,9,10
정렬 중:1,0,4,7,5,32,12,9,10
정렬 중:1,0,4,7,5,9,12,32,10
정렬 중:1,0,4,7,5,9,10,32,12
정렬 중:0,1,4,7,5,9,10,32,12
정렬 중:0,1,4,5,7,9,10,32,12
정렬 중:0,1,4,5,7,9,10,12,32
정렬 후:0,1,4,5,7,9,10,12,32

좋은 웹페이지 즐겨찾기