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

}
posted @ 2019-11-24 19:30  夜空守望者Z  阅读(146)  评论(0编辑  收藏  举报