java學習筆記(5)-排序(1)

標籤(空格分隔): 學習筆記java


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. 選擇排序ui

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.直接插入code

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+" ");
        }
    }

}
相關文章
相關標籤/搜索