Java的冒泡排序,快速排序,归并排序,计数排序,二分查找法

Java的冒泡排序,快速排序,归并排序,计数排序,二分查找法

文章内容
归并排序
冒泡排序
二分法查找
计数排序
快速排序

归并排序
package java_sort;

import java.util.Arrays;
//归并排序:将多个数据集合为一个数据集:此处以有序数据集为例
public class MergeSort{
	public static void main(String[] args) {
		int[] arr1={1,2,3,5,6,8,10};
		int[] arr2={2,3,4,7,9,10,20,21,23,24};
		System.out.println(Arrays.toString(msort(arr1, arr2)));
	}
	//定义一个归并排序的方法
		public static int[] msort(int[] arr1,int[] arr2){
			//定义一个结果集:新数组
			int[] resarr=new int[arr1.length+arr2.length];
			//定义3个变量  分别记录3个数组的下标变化的
			int m=0;//arr1下标
			int n=0;//arr2下标
			int index=0;//resarr下标的
			//循环条件  只要两个数组中都有元素  就得比较
				//arr1有元素   m<=arr1.length-1
				//arr2有元素   n<=arr2.length-1  while|for
			//循环条件1:两个数组中都有元素
			while( m<=arr1.length-1 && n<=arr2.length-1){
				//比较  小的进最终数组
				if(arr1[m]<= arr2[n]){
					//小的给最终的新的数组赋值
					resarr[index++]=arr1[m++];
					/*index++;
					m++;*/
				}else{//arr1[m]> arr2[n]
					resarr[index++]=arr2[n++];
				}
			}
			//循环条件2:数组1还有元素:则将剩余元素全部放入新数组
			while(m<=arr1.length-1){
				resarr[index++]=arr1[m++];
			}
			//循环条件3:可能arr2
			while(n<=arr2.length-1){
				resarr[index++]=arr2[n++];
			}
			return resarr;
		} 
}

//总结:归并排序:
/*前提:多个数据集必须提前排好序!!!
将多个数组合并到一个新建数组中,将小的值依次赋给新数组*/
冒泡排序
package java_sort;

public class sort01 {
	//java增强排序---冒泡排序-升序排序
	public static void main(String[] args) {
		int[] ary=new int[]{23,2,434,5,64,2,1};
		/*规律:
		//遍历数组进行排序:内外循环进行比较:
		外循环控制对比轮数:内循环控制和谁比:数组i开始依次和之后的书进行比较*/
		for(int i=0;i<ary.length-1;i++){
			for(int j=0;j<ary.length-1-i;j++){//选择排序仅仅是此处开始位置是i+1
			if(ary[j]>=ary[j+1]){//交换位置
			int num=ary[j];
			ary[j]=ary[j+1];
			ary[j+1]=num;//交换完毕
			}	
			}
		}
		//遍历排序完毕数组
		for (int arry:ary){
		System.out.println(arry);
		}
	}
}

package java_sort;

public class sort02 {
	//二分查找法:利用二分查找在有序数组中查找某数字
/*	前提:该数组是升序排序的有序数组
	原理:在数组中查找某个数字:输出其在数组中的位置下标:*/
	public static void main(String[] args) {
		int[] arry=new int[]{1,2,5,7,8,9};
		int num=5;
		sort02.findsort(arry, num);
	}
	private static void findsort(int [] arry,int num){
		//利用二分查找在有序数组中查找某数字
	    int low = 0;
	    int high = arry.length - 1;
	    int middle=(low+high)/2;
	    //while循环查找:一直往数组中间靠
	    while (low <= high) {
	    	//确定其在数组中的那一部分
	        if (num == arry[middle]) {//将查找数字和数组中间数进行 比较
	        	break;
	        //判断上限是
	        } else if (num < arry[middle]) {//
	            high = middle - 1;
	        //判断下限
	        } else{
	            low = middle + 1;
	        }
	       
	    }
	    //若没有,则返回-1
	    System.out.println(arry[middle]);
	}

}

二分查找法
package java_sort;

public class sort02 {
	//二分查找法:利用二分查找在有序数组中查找某数字
/*	前提:该数组是升序排序的有序数组
	原理:在数组中查找某个数字:输出其在数组中的位置下标:*/
	public static void main(String[] args) {
		int[] arry=new int[]{1,2,5,7,8,9};
		int num=5;
		sort02.findsort(arry, num);
	}
	private static void findsort(int [] arry,int num){
		//利用二分查找在有序数组中查找某数字
	    int low = 0;
	    int high = arry.length - 1;
	    int middle=(low+high)/2;
	    //while循环查找:一直往数组中间靠
	    while (low <= high) {
	    	//确定其在数组中的那一部分
	        if (num == arry[middle]) {//将查找数字和数组中间数进行 比较
	        	break;
	        //判断上限是
	        } else if (num < arry[middle]) {//
	            high = middle - 1;
	        //判断下限
	        } else{
	            low = middle + 1;
	        }
	       
	    }
	    //若没有,则返回-1
	    System.out.println(arry[middle]);
	    
	  
		
	}

}

快速排序
package java_sort;

import java.util.Arrays;

public class sort04 {
	
	
	public static void main(String[] args) {
		int[] arr={23,12,34,10,40,3};
		qsort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
	
	//快速排序
	//1.定义一个递归方法,执行寻找界点的方法
	public static void qsort(int[] arr,int left,int right){
		//2.递归出口为:
		if(left>=right){
			return;
		}else{//递归执行规律
			//获取第一个分界点:第一个分界点为;后序所有分界点由下面方法获得;
			int index=getFinalIndex(arr, left, right);//得到方法中界点
			//分界点左侧
			qsort(arr, left, index-1);
			//分界点右侧
			qsort(arr, index+1, right);
		}
	}
	//获取每一轮的最终的分界点  :利用递归分别让界点两侧执行以下方法
	public static int getFinalIndex(int[] arr,int left,int right){
		//1.获取边界  key=2
		int key=arr[left];
		//2   3    1	5    8
		//0	  1    2    3    4
		while(left<right){//大条件   外层循环一次
			//3,12,10,k,40,34
		//从右向左  循环遍历  数组的每一个元素  和key比较
			if(arr[right]>=key && left<right){//内层所有的
				right--;
			}else{//交换位置
				int num=0;
				num=arr[left];
				arr[left]=arr[right];
				arr[right]=num;
			}
		//从左向右   循环遍历每一个元素
			if(arr[left]<=key && left<right){
				left++;
			}else{//交换位置
				int num=0;
				num=arr[left];
				arr[left]=arr[right];
				arr[right]=num;
			}
		}
		//此时中界点寻找完毕:位置为  left 或者 right:
		//新的界点值left==right:传入新数组
		arr[left]=key;
		return left;
	}

}

mysql经典50道练习题

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值