java学习笔记(5)-排序(1)

标签(空格分隔): 学习笔记


1. 冒泡

public class MaoPao{
    public static void sort(int[] arr){
        for(int i=arr.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                if(arr[j]>arr[j+1]){
                    int tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }    
        }
    }
    public static void main(String[] args){
        int[] arr=new int[]{1,4,11,-3,34,5,-2,7,8,0,12,};
        sort(arr);
        for(int num:arr){
            System.out.print(num+" ");
        }
    }
}

2. 快排

public class QuickkSort {
    public static void sort(int[] matrix,int start,int end) {
        if(start>=end) return;
        int l=start;
        int r=end;
        int tmp=matrix[l];
        while(l<r) {
            while(matrix[r]>=tmp && l<r) {
                r--;
            }
            matrix[l]=matrix[r];
            while(matrix[l]<=tmp && l<r) {
                l++;
            }
            matrix[r]=matrix[l];
        }
        matrix[l]=tmp;
        sort(matrix,start,l-1);
        sort(matrix,l+1,end);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr=new int[] {1,4,11,-3,34,5,-2,7,8,0,12};
        sort(arr, 0, arr.length-1);
        for (int num:arr) {
            System.out.print(num+" ");
        }
        
    }

}

3. 选择排序

public class SelectSort {
    public static void sort(int[] arr) {
        for(int i=0;i<arr.length;i++) {
            int mindex=i;
            for(int j=i;j<arr.length;j++) {
                if(arr[mindex]>arr[j])
                    mindex=j;
            }
            int tmp=arr[mindex];
            arr[mindex]=arr[i];
            arr[i]=tmp;
        }
        
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr=new int[] {1,4,11,-3,34,5,-2,7,8,0,12};
        sort(arr);
        for(int num:arr) {
            System.out.print(num+" ");
        }
    }

}

4.直接插入

public class InsertSort {
    public static void sort(int[] arr) {
        for(int i=0;i<arr.length-1;i++) {
            for(int j=i+1;j>0;j--) {
                if(arr[j]<arr[j-1]) {
                    int tmp=arr[j];
                    arr[j]=arr[j-1];
                    arr[j-1]=tmp;
                }else break;
                //break是一定要加的,如果插入之后不加break,插入之后还会和前面的比较,浪费时间
            }
        }
        
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr=new int[] {1,4,11,-3,34,5,-2,7,8,0,12};
        sort(arr);
        for(int num:arr) {
            System.out.print(num+" ");
        }
    }

}

5.二分插入

public class Insert {
    public static void sort(int [] arr) {
        for(int i=0;i<arr.length-1;i++) {
            int left=0;
            int right=i;
            while(left<right) {
                int mid=left+(right-left+1)/2;
                if(arr[mid]>=arr[i+1]) {
                    right=mid-1;
                }
                else {
                    left=mid;
                }
            }
            
            
            int k=arr[i+1]>=arr[left]?left+1:left;
//上述这段代码还可以解决一个二分查找问题,及如果找到某个数在数组中的索引,就返回他的索引,如果这个数存在多个,就返回最左边的那个索引,效果不错
            int tmp=arr[i+1];
            for(int j=i;j>=k;j--) {
                arr[j+1]=arr[j];
            }
            arr[k]=tmp;
            
            
            
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr=new int[] {1,9,2,2,6,8,3,56,23,66,21,12,14,34};
        sort(arr);
        for(int num:arr) {
            System.out.print(num+" ");
        }
    }

}

猜你喜欢

转载自www.cnblogs.com/starstrrys/p/11923840.html