빠 른 정렬, 병합 정렬, 정렬 선택, 정렬 삽입 자바 구현
4512 단어 알고리즘 진급
빠 른 정렬 은 일종 의 분할 통치 사상 이 정렬 알고리즘 에서 의 전형 적 인 응용 이다.본질 적 으로 빠 른 정렬 은 거품 정렬 을 바탕 으로 하 는 재 귀 분 치 법 이 라 고 할 수 있다.
평균 상황 에서 n 개 항목 을 정렬 하려 면Ο차 비교.최 악의 경우 에는Ο(n2) 차 비교, 그러나 이런 상황 은 흔 하지 않다.사실 빠 른 정렬 은 보통 다른 것 보다 뚜렷 하 다.Ο(nlogn) 알고리즘 이 더 빠 릅 니 다. 내부 순환 (inner loop) 은 대부분의 구조 에서 효율 적 으로 이 루어 질 수 있 기 때 문 입 니 다.
빠 른 정렬 을 위 한 주요 논리:
1. 확정 치 비교 의 시작 및 기준 치
2. 왼쪽 구간 쾌속 배열
3. 오른쪽 구간 쾌속 줄
4. 정렬 완료 로 재 귀적
Java 구현:
public static void quickSortFromSmallToLarge(int[] arr, int low, int high){
int left,right,pivot,temp;
if(low>high){
return;
}
left=low;
right=high;
pivot = arr[low];
while (left=arr[left]&&left
전형 적 인 분할 통치 사상의 알고리즘 응용 으로서 정렬 의 실현 은 두 가지 방법 에 의 해 이 루어 진다.
위 에서 아래로 재 귀 (모든 재 귀 방법 은 교체 로 다시 쓸 수 있 기 때문에 두 번 째 방법 이 있다).아래 에서 위로 의 교체
public static int[] mergeSortFromSmallToLarge(int[] array) {
int[] arr = Arrays.copyOf(array, array.length);
if (arr.length < 2) {
return arr;
}
int middle = (int) Math.floor(arr.length / 2);
int[] left = Arrays.copyOfRange(arr, 0, middle);
int[] right = Arrays.copyOfRange(arr, middle, arr.length);
return merge(mergeSortFromSmallToLarge(left), mergeSortFromSmallToLarge(right));
}
public static int[] merge(int[] left, int[] right) {
int[] result = new int[left.length + right.length];
int i = 0;
while (left.length > 0 && right.length > 0) {
if (left[0] <= right[0]) {
result[i++] = left[0];
left = Arrays.copyOfRange(left, 1, left.length);
} else {
result[i++] = right[0];
right = Arrays.copyOfRange(right, 1, right.length);
}
}
while (left.length > 0) {
result[i++] = left[0];
left = Arrays.copyOfRange(left, 1, left.length);
}
while (right.length > 0) {
result[i++] = right[0];
right = Arrays.copyOfRange(right, 1, right.length);
}
return result;
}
public static void selecrSortFromSmallToLarge(int [] array,int index){
if (index>=array.length){
return;
}
int small=array[index];
for (int i=index;i
public static void insertSortFromSmallToLarge(int[] array){
for(int i = 1;i < array.length;i++) {
int temp = array[i];
int index = i-1;
while(index >= 0 && array[index] > temp) {
array[index + 1] = array[index];
index--;
}
array[index+1] = temp;
}
}
public static void insertSortFromlargeToSmall(int[] array){
for (int i=1;i=0&&temp>array[index]){
array[index+1]=array[index];
index--;
}
array[index+1]=temp;
}
}