자바 버 전 10 대 정렬 고전 알고리즘:전체 코드(3)
간단 한 설명:이 알고리즘 은 분 치 법 을 사용 하여 배열 을 계속 분할 하여 하나의 요소 가 될 때 까지 비교 한 다음 에 합병 하 는 것 입 니 다.(합병 과정 은 두 부분 이 각각 처음부터 비교 하고 최소 또는 최대 요 소 를 꺼 내 새로운 지역 에 두 고 두 부분 에서 가장 크 거나 가장 작은 요 소 를 계속 추출 하 는 것 입 니 다.이 두 부분 이 합 쳐 질 때 까지 마지막 에 모든 것 이 합 쳐 집 니 다.마지막 으로 완전한 질서 있 는 서열 을 형성한다)
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: MergeSort
* @Description:
* @author:
* @date: 2021-06-24 10:35
*/
public class MergeSort {
//
public static void mergeSort(int []arr ,boolean ascending){
int[] temp = new int[arr.length]; // , ,
mergeSort(arr,0,arr.length-1,temp,ascending);
}
public static void mergeSort(int []arr){
mergeSort(arr,true);
}
/**
*
* @param arr
* @param left
* @param right
* @param temp
*/
public static void mergeSort(int []arr,int left,int right,int[] temp,boolean ascending){
if(left<right){ // , , left==right 。
// , 10,left=0,right=9,mid=4 ,0~4,5~9
// 9,left=0,right=8,mid=4,0~4,5~8
int mid = left + (right-left)/2; //
//int mid = (left+right)/2;
mergeSort(arr,left,mid,temp,ascending); // ,
mergeSort(arr,mid+1,right,temp,ascending); // ,
merge(arr,left,mid,right,temp,ascending); //
}
}
private static void merge(int[] arr,int left,int mid,int right,int[] temp,boolean ascending){
int i = left; //
int j = mid+1; //
int t = 0; //
while(i<=mid&&j<=right){
if(ascending?arr[i]<arr[j]:arr[i]>arr[j]){ // , temp, 1
temp[t++] = arr[i++];
}else {
temp[t++] = arr[j++];
}
}
while(i<=mid){ // temp ――
temp[t++] = arr[i++];
}
while(j<=right){ // temp ――
temp[t++] = arr[j++];
}
t = 0;
// temp
while(left<=right){
arr[left++] = temp[t++];
}
}
}
삽입 정렬간단 한 설명:가장 간단 한 이 해 는 지 주 를 칠 때 우리 가 카드 를 받 은 후의 정리 과정 이다.두 번 째 카드(우리 가 이 카드 를 들 었 다 고 가정 하면 비교)부터 시작 해서(승 서 를 말 하면)뒤에서 앞으로 비교 하 는 것 이다.앞 에 있 는 카드 보다 작 으 면 카드 를 뒤로 이동 하 는 것 이다.적당 한 위 치 를 찾 을 때 까지(이 위치의 앞 에 있 는 카드 는 이것 보다 내 려 놓 을 카드 가 크 지 않다)이 카드 를 이 위치 에 놓 고 천천히 앞 부분 이 질서 가 있 게 되 어 모든 질서 가 있 을 때 까지 하면 된다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: StraghtInsertSort
* @Description:
* @author:
* @date: 2021-06-24 10:36
*/
public class StraghtInsertSort {
//
public static void straghtInsertSort(int[] arr) {
straghtInsertSort(arr, true);//
}
public static void straghtInsertSort(int[] arr, boolean ascending) {
for (int i = 1; i < arr.length; i++) {
int temp = arr[i];
int j=0; //
for (j = i - 1; j >= 0 && (ascending ? temp < arr[j] : temp > arr[j]); j--) {
arr[j + 1] = arr[j];
}
// , j+1,
// j
// , ,
arr[j + 1] = temp;
}
}
}
힐 정렬간단 한 설명:힐 정렬 은 정렬 을 삽입 하 는 개선 판 입 니 다.우 리 는 아래 표 차 라 는 것 을 이해 합 니 다.즉,아래 그림 의 증분 d 입 니 다.처음에 표 차 는 arr.length/2 이 고 계속/2 입 니 다.같은 표 차(이 몇 개 를 따로 꺼 낸 것 과 같 습 니 다)의 몇 개 수 를 삽입 하여 정렬 하면 됩 니 다.
전체 코드:
package com.keafmd.Sequence;
/**
* Keafmd
*
* @ClassName: ShellSort
* @Description:
* @author:
* @date: 2021-06-24 10:39
*/
public class ShellSort {
public static void shellSort(int[] arr) {
shellSort(arr,true);
}
public static void shellSort(int[] arr,boolean ascending) {
for(int d = arr.length/2;d>0;d/=2){
for(int i=d;i< arr.length;i++){
int temp = arr[i];
int j=0;
for(j=i-d;j>=0&&(ascending?temp<arr[j]:temp>arr[j]);j-=d){
arr[j+d]=arr[j];
}
arr[j+d] = temp;
}
}
}
}
총결산이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.