Hark 의 데이터 구조 와 알고리즘 연습 의 힐 정렬

알고리즘 설명
힐 정렬 은 정렬 을 삽입 하 는 최적화 판 이다.
정렬 을 삽입 하 는 최 악의 시간 복잡 도 는 O (n2) 이지 만 정렬 하려 는 배열 이 거의 질서 있 는 수열 이 라면 시간 복잡 도 를 효과적으로 낮 출 수 있다.
힐 정렬 의 목적 은 하나의 increment (증분) 를 통 해 수열 그룹 을 교환 하여 정렬 하 는 것 이다. 최종 적 으로 수열 을 거의 질서 있 게 하고 마지막 에 삽입 정렬 을 실행 하여 결 과 를 집계 하 는 것 이다.
increment = n / 2, 즉 9 개의 수 를 통 해 증 가 량 은 4, 2, 1 이다.  20 개 라면 10, 5, 2, 1 이다. increment 가 1 일 때 거의 질서 있 는 수열 에 정렬 을 삽입 합 니 다.
 
 
 
시간 복잡 도
O(n2/3)
 
공간 복잡 도
O(1)
 
코드
자바
/*

 *     

 */

public class ShellSort {

	public static void main(String[] args) {

		int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 };

		ShellSortMethod(arrayData);

		for (int integer : arrayData) {

			System.out.print(integer);

			System.out.print(" ");

		}

	}



	public static void ShellSortMethod(int[] arrayData) {

		int i, j, temp = 0;

		int increment = arrayData.length;

		do {

			increment = increment / 2;  //  

			for (i = increment; i < arrayData.length; i++) {

				if (arrayData[i] > arrayData[i - increment]) {   //           

					temp = arrayData[i];  //              

					

					//            ,       ,    。   

					//temp > arrayData[j]        ,              

					for (j = i - increment; j >= 0 && temp > arrayData[j]; j -= increment) {

						arrayData[j + increment] = arrayData[j];

					}

					arrayData[j + increment] = temp;

				}

			}

		} while (increment > 0);

	}

}


  
 
결실
9 8 7 6 5 4 3 2 1 


좋은 웹페이지 즐겨찾기