정렬. - 통 정렬.
1660 단어 데이터 구조&알고리즘
알고리즘 설명 자 는 사람 이 하나의 BucketSize 를 설정 하고 통 마다 몇 개의 서로 다른 수 치 를 배치 할 수 있 는 지 설명 합 니 다 (예 를 들 어 BucketSize = = 5 시 에 이 통 은 (1, 2, 3, 4, 5 곶 이라는 몇 가지 숫자 를 저장 할 수 있 지만 용량 에 제한 이 없 으 면 100 개 3 을 저장 할 수 있 습 니 다).; 입력 한 데 이 터 를 옮 겨 다 니 며 데 이 터 를 하나씩 해당 하 는 통 에 넣 고, 빈 통 이 아 닌 통 마다 정렬 할 수 있 으 며, 다른 정렬 방법 을 사용 할 수도 있 고, 재 귀적 으로 통 으로 정렬 할 수도 있 습 니 다. 빈 통 이 아 닌 통 에서 정렬 된 데 이 터 를 연결 할 수도 있 습 니 다. 재 귀적 으로 통 을 각 통 으로 정렬 할 경우, 통 수가 1 일 때 수 동 으로 BucketSize 를 줄 여야 합 니 다.다음 순환 통 의 수 를 증가 시 킵 니 다. 그렇지 않 으 면 순환 에 빠 져 메모리 가 넘 칩 니 다.
알고리즘 분석 통 정렬 이 가장 좋 은 상황 에서 선형 시간 O (n) 를 사용 하고 통 정렬 의 시간 복잡 도 는 각 통 간 의 데 이 터 를 정렬 하 는 시간 복잡 도 에 달 려 있다. 다른 부분의 시간 복잡 도 는 모두 O (n) 이기 때문이다.. 분명 한 것 은 통 의 구분 이 작 을 수록 각 통 간 의 데이터 가 적 고 정렬 에 걸 리 는 시간 도 적 을 것 입 니 다. 그러나 해당 하 는 공간 소 모 는 커 집 니 다. 최 적 상황: T (n) = O (n + k) 최 악의 상황: T (n) = O (n + k) 평균 상황: T (n) = O (n2)
자바 알고리즘 구현:
public static void bucketSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
}
int[] bucket = new int[max + 1];
for (int i = 0; i < arr.length; i++) {
bucket[arr[i]]++;
}
int i = 0;
for (int j = 0; j < bucket.length; j++) {
while (bucket[j]-- > 0) {
arr[i++] = j;
}
}
}
사진 설명 박문:https://blog.csdn.net/hellozhxy/article/details/79911867
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정렬. - 통 정렬.통 정렬 (Bucket Sort) 통 정렬 은 계수 정렬 의 업그레이드 버 전 입 니 다.그것 은 함수 의 매 핑 관 계 를 이용 하 였 으 며, 효율 여부 의 관건 은 바로 이 매 핑 함수 의 확정 에 있다.통 정...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.