JAVA는 (선택 정렬, 버블 정렬 삽입 정렬, 정렬 카운트) 배열을 정렬

A. 선택 정렬

 

1. 기본 원칙

假设要按升序排列一个数列。选择排序法先找到数列中最小的数,然后将它和第一个元素交换。接下来,在剩下的数中找到最小数,将它和第二个元素交换,依此类推,直到数列中仅剩一个数为止。

 

2. 주문 프로세스

배열 {} 49,38,65,97,76,13,27,49 예 :

第一次 : [13, 38, 65, 97, 76, 49, 27, 49] 
第二次 : [13, 27, 65, 97, 76, 49, 38, 49] 
第三次 : [13, 27, 38, 97, 76, 49, 65, 49] 
第四次 : [13, 27, 38, 49, 76, 97, 65, 49]
第五次 : [13, 27, 38, 49, 49, 97, 65, 76] 
第六次 : [13, 27, 38, 49, 49, 65, 97, 76] 
第七次 : [13, 27, 38, 49, 49, 65, 76, 97]

3. 복잡성

 O의 선택 정렬 시간 복잡도 (N은 2 ^).

 제 N 요소 확인 그런데 소자의 수를 N를 확인하기 위하여하기 - 1, N - 2, ..., 2, 1. 각 검사 요소 평균 1/2 * N, 실행 시간 정도로 N * 2 * N, O를 쓰는 간단한 (N ^ 2).

 

다음을 달성 4.JAVA :

class selectSort{
    public static void main(String[]args){
        int[] arr={49,38,65,97,76,13,27,49};
        for(int i=0;i<arr.length-1;i++){             //-1是因为没有必要进行最后一个数
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]>arr[j]){
                    swap(arr,i,j);//即用即释放
                }
            }
        }
        show(arr);
    }
    public static void swap(int []arr,int i,int j ){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public static void show(int[]arr){
        String s="[";
        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                s+=arr[i]+"]";

            }else{
                s+=arr[i]+",";
            }
        }
        System.out.println(s);
    }
}

출력 :

[13, 27, 38, 49, 49, 65, 76, 97]

 

 

II. 버블 정렬

1. 근거 :

对比相邻的元素值,如果满足前一个元素值小于后一个元素值就交换元素值,把较小的元素移动到数组的前面(从小到大排序),把大的元素移动到数组的后面,即交换两个元素的位置,这样较小的元素就像气泡一样一直从底部上升到顶部。

2. 주문 프로세스

예로서, 배열 [5,2,4,6,1,3]


第一次:[2,4,5,1,3,6]
第二次:[2,4,1,3,5,6]
第三次:[2,1,3,4,5,6]
第四次:[1,2,3,4,5,6]

알고리즘을 구현합니다

더블 사이클 알고리즘 마지막 사이클은 단지 하나 개의 배열 요소, 명암, 정렬이 완료되었지만 때문에 정렬 발사를 제어하기위한 외부 루프는 일반적으로, 배열 길이 뺀 정렬에있어서, 상기 버블 . 주요 내부 루프 저감 라운드 정렬 교환 수와 비교가 교체 위치 여부를 결정하기위한 어레이의 각 요소의 크기와 비교하여 인접한다.

 

다음을 달성 4.JAVA :

class bubbleSort{
    public static void main(String[]args){
        int[] arr={5,2,4,6,1,3};
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
        }
        show(arr);

    }
    public static void swap(int[]arr,int i,int j){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;

    }
    public static void show(int [] arr){
        String s="[";
        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                s+=arr[i]+"]";
            }else{
                s+=arr[i]+",";
            }
        }
        System.out.println(s);
    }
}

출력 :

[1,2,3,4,5,6]

 

 

III. 삽입 정렬

1. 예 삽입 정렬 설명 [6,4,7,5]를

일종의 삽입을 설명하기 위해 6,4, 7,5 예를 사용 :
그것은 일종의 삽입을하지 않습니다이 시간, 그래서 첫 번째는, 전면이하지 않았기 때문에 일종의 먼저 첫 번째 데이터 (6), (6)을 찾아 처음 삽입, 그래서 첫번째 결과는 6,4,7,5이다

그 다음,이 경우, 데이터의 두 번째 정렬 순서에 삽입하여 6,4,7,5, 그리고 그 제 2 데이터는이 시점에서 다음 데이터를 입력하고, (4) 이전에 배치 순서와 비교하고, 4 시작할 (4)가 6보다 작이기 때문에이 때의 결과는 6 4 정도로 열 (6)은, 그 4 (6)의 전방으로 이동 될 경우가 될 것이며,이 경우는 4, 6 비교 그래서에서는 좋은 데이터 인 5

도 7은이 때의 제 3 데이터 및 주문 데이터 4,6,7,5되고있다이고,도 7은 이전에 배열 된 시퀀스 일이 시간을 비교하여 양호한 데이터 행 4 것 6, 7, 6, 먼저 좋은 비 (처음보다 이유 (6, 7)로 인해 4, 6 이미 정렬되기 때문에 7 대 (6), 다음 (4)와 비교하여보다 6 앞의 필요가없는 경우이 때 이 때의 결과는 4,6,7,5 그래서 a) 다음 비교에 발견, 그래서이 경우에는 변경하지 않아도,보다 큰 6 7

다음에 제 4 데이터는 데이터의 시계열이 4,6,7,5 및 5가되고 있으며, 양호한 데이터 행 4 것, 5, 6은 제 5, 7 및 비교되고 비율 (왜 5 때문에이 때 처음에 비해 7, 5, 7보다 큰, 당신이 필요하지 않은 경우 4,6,7가 이미 일종의 좋은 때문에, 6, 비교 사 앞), 다음 (5) 작게 7 비교 7 5 후에,이 경우의 시퀀스는, 그래서 시퀀스 4,5,6,7-이 경우에, 4,6,5,7, 5, 6이 다음 5~6 시간으로 비교된다 도 4 및도 5는 4,5,6,7- 순서 때문에 큰 5 4 중, 비교 한 후

 

다음을 달성 2.JAVA :

class insertSort{
    public static void main(String[]args){
        int [] arr={6,4,7,5};
        int e;
        int j;
        for(int i=1;i<arr.length;i++){
                e=arr[i];
            for(j=i;j>0&&arr[j-1]>e;j--){       //指针j从第二位数开始即j>0
                arr[j]=arr[j-1];
            }
            arr[j]=e;
        }
        show(arr);
    }
    public static void swap(int []arr,int i,int j ){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public static void show(int[]arr){
        String s="[";
        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                s+=arr[i]+"]";

            }else{
                s+=arr[i]+",";
            }
        }
        System.out.println(s);
    }
}

출력 :

[4,5,6,7]

 

 IV. 계수 정렬

1. 기본 원칙

다음을 달성 2.JAVA :

class countSort{
    public static void main(String[]args){
        int[] arr={8,5,9,2,7,4,6,1,3,10,-3,-2,-10};
        int min=arr[0];
        int max=arr[0];
        for(int i=0;i<arr.length;i++){  //O(n)
            if(arr[i]>max){
                max=arr[i];
            }
            if(arr[i]<min){
                min=arr[i];
            }
        }
        int[] nums=new int[max-min+1];
        int offset=min;
        for(int i=0;i<arr.length;i++){  //O(n)
            nums[arr[i]-offset]++;
        }
        int index=0;
        for(int i=0;i<nums.length;i++){  //O(m)
            if(nums[i]!=0){
                for(int j=0;j<nums[i];j++){
                    arr[index++]=i+offset;
                }
            }
        }
        show(arr);
    }
    public static void swap(int []arr,int i,int j ){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public static void show(int[]arr){
        String s="[";
        for(int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                s+=arr[i]+"]";

            }else{
                s+=arr[i]+",";
            }
        }
        System.out.println(s);
    }
}

출력 :

[-10,-3,-2,1,2,3,4,5,6,7,8,9,10]

 

요약 :

  •         선택적으로, 기포는 삽입 정렬 데이터 셋 간의 대소 관계에 따라 정렬 비교
  •         정렬에만 정수에 관계없이 정렬의 크기의 데이터 자체의 특성과 비교 욕조 카운팅 기본
  •         그것은 시간을 희생 공간의 전형적인 일종이다

 

게시 31 개 원래 기사 · 원 찬양 한 · 전망 1277

추천

출처blog.csdn.net/qq_45824565/article/details/104364916