손 으로 거품 정렬 과 정렬 선택 을 알려 드릴 게 요.

거품 정렬
원리:
처음부터(왼쪽)부터 모든 인접 한 요 소 를 비교 하고 첫 번 째 가 두 번 째 보다 크 면 그들의 위 치 를 교환 하고 한 바퀴 를 실행 한 후에 맨 끝(맨 오른쪽)이 가장 큰 요소 이다.
예:
배열 nums={6,8,2,9,4}이 존재 한다 고 가정 하고 nums 배열 을 정렬 합 니 다.
在这里插入图片描述
왼쪽 에서 오른쪽으로 두 요 소 를 꺼 내 비교 하면 두 가지 상황 이 나타난다.
1.왼쪽 원소<=오른쪽 원소,불변
2.왼쪽 요소>오른쪽 요 소 를 그들의 위 치 를 교환 합 니 다(여기>=이 라 고 쓸 수 있 습 니까?안 됩 니 다.정렬 이 불안정 하기 때 문 입 니 다)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
다음은 새로운 정렬 입 니 다.논 리 는 위의 그림 의 절차 와 같 습 니 다.다른 것 은 가장 큰 요 소 를 제외 하고 비교 하지 않 아 도 됩 니 다.
손 찢 기 코드:

/*
              
 */
public class BubbleSort1 {
    //    
    public static int[] nums = {4,1,7,11,9,55};
    //main  
    public static void main(String[] args){
        //  for        ,end--,              
        for (int end = nums.length - 1; end > 0; end--){
            for (int begin = 1; begin <= end; begin++){
                if(nums[begin] < nums[begin - 1]){    //                
                    //    
                    int temp = nums[begin];
                    nums[begin] = nums[begin - 1];
                    nums[begin - 1] = temp;
                }
            }
        }
        //      
        for(int num : nums){
            System.out.print(num+"_");
        }
    }
}
시간 복잡 도 는 4.567914.즉 n 의 제곱 이지 만 이것 은 평균 시간 복잡 도 이다.
가장 좋 은 시간 복잡 도가 존재 한다O(n^2),바로 배열 이 원래 질서 가 있다 는 것 이다.즉,한 번 만 스 캔 하면 된다 는 것 이다.
최적화 정책:
일부 질서 있 는 상황 이 존재 하기 때문에 예 를 들 어 nums 배열 은{8,5,2,10,11,12}이다.즉,10,11,12 는 비교 할 필요 가 없다.
최적화 코드:

/*
            
 */
public class BubbleSort1 {
    public static int[] nums = {4,1,7,11,9,55};
    public static void main(String[] args){
        for (int end = nums.length - 1; end > 0; end--){
            int sortIndex = 1;  //          
            for (int begin = 1; begin <= end; begin++){
                if(nums[begin] < nums[begin - 1]){
                    int temp = nums[begin - 1];
                    nums[begin - 1] = nums[begin];
                    nums[begin] = temp;
                    sortIndex = begin;
                }
                end = sortIndex;
            }
        }
        for(int num : nums){
            System.out.print(num+"_");
        }
    }
}
정렬 선택
원리:
배열 에서 가장 큰 요 소 를 찾 은 다음 에 끝(맨 오른쪽)의 요소 와 위 치 를 교환 하고 한 바퀴 를 실행 한 후에 끝(맨 오른쪽)의 요 소 는 가장 큰 요소 입 니 다.
예:
배열 nums={5,8,1,9,3}이 존재 한다 고 가정 하고 nums 배열 을 정렬 하여 현재 최대 요 소 를 나타 내 는 아래 표 시 를 준비 합 니 다.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
다음은 새로운 정렬 입 니 다.논 리 는 위의 그림 의 절차 와 같 습 니 다.다른 것 은 가장 큰 요 소 를 제외 하고 비교 하지 않 아 도 됩 니 다.
손 찢 기 코드:

/**
 *     
 */
public class SelectionSort {
    //    
    private static int[] nums = {6,3,2,8,9};
    //main  
    public static void main(String[] args){
        //  for        ,end--,              
        for(int end = nums.length - 1; end > 0; end--){
            int maxIndex = 0;   //    0        
            for(int begin = 1; begin <= end; begin++){  //        
                if(nums[maxIndex] < nums[begin]){   //                
                    maxIndex = begin;   //        
                }
            }
            //                 
            int temp = nums[maxIndex];
            nums[maxIndex] = nums[end];
            nums[end] = temp;
        }
        //    
        for(int num : nums){
            System.out.print(num+"_");
        }
    }
}
총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 글 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기