자바 빠 른 정렬 및 3 방향 빠 른 정렬 실현
4542 단어 알고리즘
배열 의 한 요소 (일반적으로 배열 의 첫 번 째 요소) 를 참조 물 로 선택 하고 배열 의 참조물 보다 작은 요 소 를 배열 왼쪽 에 배열 하 며 참조물 보다 큰 요 소 를 배열 오른쪽 에 배열 합 니 다.
빠 른 정렬 작업 절차
코드 구현
public void quickSort(int[] array, int low, int high) {
if (low >= high) {
return;
}
int mid = divide(array, low, high);//
quickSort(array, low, mid-1);//
quickSort(array, mid+1, high);
}
public int divide(int[] array, int low, int high) {
int a = array[low];//
int i = low + 1;//
int j = high;//
while(i <= j) {
while(array[i] <= a) {//
if (i >= j) {return;}//
i++;
}
while(array[j] > a) {//
if (j <= i) {return;}
j--
};
swap(array, i++, j--);//
}
swap(array, low, j);
return j;//
}
3 방향 빠 른 정렬
배경
배열 에 중복 요소 가 대량으로 존재 하면 보통 빠 른 정렬 은 모든 중복 요 소 를 다시 나 누 어 정렬 합 니 다.사실 한 요소 의 위치 가 확정 되면 다른 중복 요소 의 위치 도 확정 되 어야 한다.3 방향 빠 른 정렬 이 이 문 제 를 최적화 시 켰 다.
public void multiQuickSort(int[] array, int low, int high) {
if(low >= high){
return;
}
int i = array[low];// , ,
int j = i + 1;//
int k = high;//
while(j <= k) {
if (a[j] < a[i]) {
swap(array, i, j);// ,
i++;//
j++;//
} else if (a[j] == a[i]) {
j++;//
} else {
swap(array, j, k);//
k--;// ,
}
}// ,
multiQuickSort(array, low, i - 1);//
multiQuickSort(array, j, high);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.