자바 정렬 셸 정렬

이전 몇 편의 정렬 에 관 한 알고리즘 은 모두 비교적 간단 한 정렬 이 었 습 니 다. 꼭 쓸 수 있 는 것 은 아니 지만 한눈 에 알 수 있 습 니 다. 다음 몇 편의 정렬 은 곰 곰 이 생각 하거나 그림 을 그 려 서 묘사 해 야 할 수도 있 습 니 다. 이 글 에서 말 하 는 죽은 셸 정렬 은 증분 정렬 이 라 고도 부 릅 니 다. 그 본질은 정렬 을 삽입 하 는 것 입 니 다.배열 의 배열 방식 을 통 해 정렬 속 도 를 증가 시 킵 니 다. 그룹 을 나 누 는 방식 으로 첫 번 째 로 배열 의 길이 / 2, 두 번 째 / 4 를 결과 가 1 일 때 이 배열 을 정렬 에 삽입 하면 정렬 이 완 료 됩 니 다. 물론 그룹 을 나 눌 때 도 정렬 이 필요 합 니 다. 그래서 저 는 이것 과 빠 른 배열 과 병합 이 차이 가 많 지 않다 고 생각 합 니 다. 이해 하 세 요. 코드 를 붙 였 습 니 다.
package www.jk.shell;

import java.util.Arrays;

public class Test {

	/**
	 * @author jk,       shell  ,                            ,     
	 *                     ,        ,        ,           ,  shell  ,      
	 *             ,      ,                     ,  ,                        
	 * 
	 */
	public static void main(String[] args) {
		int[] a = { 1, 4, 2, 0, 8, 6, 4, 6 };
		shellSort(a);
		//         
		System.out.println(Arrays.toString(a));

	}

	private static void shellSort(int[] a) {
		//      
		for (int r = a.length / 2; r >= 1; r /= 2) {
			//                ,                    
			for (int i = r; i < a.length; i += r) {
				int temp = a[i];
				int j = i - r;
				while (j >= 0 && temp < a[j]) {
					a[j + r] = a[j];
					j -= r;
				}
				a[j + r] = temp;
			}
		}

	}

}

좋은 웹페이지 즐겨찾기