자바 버 전 10 대 정렬 고전 알고리즘:전체 코드(2)
간단 한 설명:
빠 른 순 서 는 매번 에 하나의 기점(첫 번 째 요소)을 찾 은 다음 에 두 명의 보초병 이다.하 나 는 맨 앞에서 뒤로 가 고 하 나 는 마지막 면 에서 앞으로 가 는 것 이다.만약 에 뒤에 있 는 보초병 이 기점 보다 큰 수 를 찾 아 멈 추 면 앞 에 있 는 보초병 은 기점 보다 큰 수 를 찾 아 멈 춘 다음 에 두 보초병 이 찾 은 수 를 교환 하 는 것 이다.마지막 보초병 두 명 을 찾 지 못 하면 만 나 서 끝난다.마지막 에 기점 과 보초병 이 만 나 는 곳 의 요 소 를 교환 한 다음 에 하나의 서열 을 기점 보다 작은 부분 과 기점 보다 큰 부분 으로 나 눈 다음 에 왼쪽 부분 과 오른쪽 부분 으로 나 누 면 마지막 결 과 는 질서 가 있다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: QuickSort
* @Description:
* @author:
* @date: 2021-06-24 10:32
*/
public class QuickSort {
//
public static void quickSort(int[] arr) {
quickSort(arr, true);
}
public static void quickSort(int[] arr, boolean ascending) {
if (ascending) {
quickSort(arr, 0, arr.length - 1, true);
} else {
quickSort(arr, 0, arr.length - 1, false);
}
}
public static void quickSort(int[] arr, int begin, int end, boolean ascending) {
if (ascending)
quickSort(arr, begin, end);
else
quickSortDescending(arr, begin, end);
}
// --
public static void quickSort(int[] arr, int begin, int end) {
if (begin > end) { //
return;
}
int base = arr[begin];
int i = begin, j = end;
while (i < j) { // (i ,j )
while (arr[j] >= base && i < j) { // j base
j--;
}
while (arr[i] <= base && i < j) { // i base
i++;
}
if (i < j) { //
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// i j
arr[begin] = arr[i];
arr[i] = base;
quickSort(arr, begin, i - 1); //
quickSort(arr, i + 1, end); //
}
//
public static void quickSortDescending(int[] arr, int begin, int end) {
if (begin > end) { //
return;
}
int base = arr[begin];
int i = begin, j = end;
while (i < j) { // (i ,j )
while (arr[j] <= base && i < j) { // j base
j--;
}
while (arr[i] >= base && i < j) { // i base
i++;
}
if (i < j) { //
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// i j
arr[begin] = arr[i];
arr[i] = base;
quickSortDescending(arr, begin, i - 1); //
quickSortDescending(arr, i + 1, end); //
}
}
직접 정렬 선택간단 한 설명:
배열 은 정렬 된 부분(앞)과 정렬 대기 시퀀스(뒤)로 나 뉜 다.
처음에는 모든 숫자 가 정렬 되 어야 한다 고 확신 했다.
정렬 을 기다 리 는 시퀀스 에서 가장 크 거나 가장 작은 요 소 를 찾 아 앞 에 있 는 정렬 된 부분 에 놓 은 다음 에 정렬 할 범 위 를 계속 좁 히 고 모든 숫자 가 정렬 될 때 까지 계속 찾 습 니 다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: SelectSort
* @Description:
* @author:
* @date: 2021-06-24 10:33
*/
public class SelectSort {
//
public static void selectSort(int[] arr, boolean ascending) {
for (int i = 0; i < arr.length; i++) {
int m = i; //
for (int j = i + 1; j < arr.length; j++) {
if (ascending ? arr[j] < arr[m] : arr[j] > arr[m]) {
m = j; // ,
}
}
//
int temp = arr[i];
arr[i] = arr[m];
arr[m] = temp;
}
}
public static void selectSort(int[] arr) {
selectSort(arr, true);
}
}
더미 정렬먼저 큰 무더기 와 작은 무 더 기 를 이해 하고 그림 을 보 세 요.
큰 무더기,부모 결점 의 값 은 모든 아이들 결점 의 값 보다 크다.루트 노드 최대
작은 지붕 더미,부모 결산 점 의 값 은 모든 아이들 이 결산 하 는 값 보다 작다.루트 노드 값 최소
간단 한 설명:
큰 지붕 이나 작은 지붕 구 조 를 구축 하면 맨 위 에 있 는 것 이 최대 치 나 최소 치 입 니 다.그러면 우 리 는 지붕 요 소 를 꺼 낸 다음 에 구 조 를 다시 구축 하고 계속 취하 고 다시 구축 하면 마지막 에 정렬 효 과 를 얻 을 수 있 습 니 다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: HeapSort
* @Description:
* @author:
* @date: 2021-06-24 10:34
*/
public class HeapSort {
//
public static void heapSort(int[] arr) {
// , ,
heapSort(arr, true);
}
public static void heapSort(int[] arr, boolean maxheap) {
//1.
for (int i = arr.length / 2 - 1; i >= 0; i--) {
// ,
sift(arr, i, arr.length , maxheap);
}
//2. +
for (int j = arr.length - 1; j > 0; j--) {
// , , ,
int temp = arr[j];
arr[j] = arr[0];
arr[0] = temp;
//
sift(arr, 0, j , maxheap); //
}
}
//
/**
* ,
*
* @param arr
* @param parent
* @param len
* @param maxheap
*/
private static void sift(int[] arr, int parent, int len, boolean maxheap) {
int value = arr[parent]; // i
for (int child = 2 * parent + 1; child < len; child = child * 2 + 1) { // parent , 2*parent+1
if (child+1 < len && (maxheap ? arr[child] < arr[child + 1] : arr[child] > arr[child + 1])) { // ,child
child++; // ,
}
// , , ,
// , ( )
if (maxheap ? value < arr[child] : value > arr[child]) {
arr[parent]=arr[child];
parent = child;
}
else {// , 。
break;
}
}
arr[parent] =value; // value
}
}
총결산이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.