자바 버 전 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;
            }
        }
    }
}
총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기