JAVA学习第五课(排序+二分查找+查表法)

PS:算法是不分语言的


排序:

1.抽取 

2.交换位置


import javax.swing.text.DefaultEditorKit.InsertBreakAction;

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;


public class Main 
{
	public static void main(String[] args)
	{
	//	int[] b = new int[]{1,2,3,4,5};同下
		
		int b[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};//同上
	
		bubblesort(b);
		System.out.println("冒泡排序结果如下:");
		print(b);
		
		int c[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};
		seletsort(c);
		System.out.println("选择排序结果如下:");
		print(c);
		
		int d[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};
		Insersort(d);
		System.out.println("\n插入排序结果如下:");
		print(d);
	}
	static void Insersort(int b[])
	{
		int len = b.length;
		for(int i = 1;i<len;i++)
		{
			if(b[i]<b[i-1])
			{
				int t = b[i],j;
				b[i] = b[i-1];
				for(j = i-2;j>=0 && b[j] > t;j--)
				{
					b[j+1] = b[j];
				}
				b[j+1] = t;
			}
		}
	}
	static void swap(int x,int y,int[] b)
	{
		int t = b[x];
		b[x] = b[y];
		b[y] = t;
	}
	/*static void swap(int a,int b)不要写成这种方式,只是单纯的交换了两个数,
	 *                              但是b数组里这两个数并没有交换
	{
		int t = a;a = b;b = t;
	}*/
	static void bubblesort(int[] b)
	{
		int len = b.length;
		for(int i = 0;i<len;i++)
		{
			for(int j = 0;j<len-i-1;j++)
			{
				if(b[j]>b[j+1])
				{
					swap(j, j+1,b);
				}
			}
		}
		
	}
	static void seletsort(int a[])
	{
		int len = a.length;
		for(int i = 0;i<len-1;i++)
		{
			for(int j = i+1;j<len;j++)
			{
				if(a[i] > a[j])
				{
					swap(i, i+1,a);
				}
			}
		}
	}
	static void print(int b[])
	{
		for(int i = 0;i<b.length;i++)
			System.out.println("b["+i+"] = "+b[i]);
	}
}
import javax.swing.text.DefaultEditorKit.InsertBreakAction;

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;


public class Main 
{
	public static void main(String[] args)
	{
	//	int[] b = new int[]{1,2,3,4,5};同下
		
		Scanner cin = new Scanner(System.in);
		
		int b[] = new int[11];
		for(int i = 0;i<11;i++)
		{
			b[i] = cin.nextInt();
		}
		bubblesort(b);
		System.out.println("冒泡排序结果如下:");
		print(b);
		System.out.print("请输入你要查找的值:");
		int n;
		n = cin.nextInt();
		
		boolean flag = B_search(n,b);
		
		if(flag==true)
			System.out.println("YES");
		else
			System.out.println("NO");
		
		cin.close();
	}
	
	static void swap(int x,int y,int[] b)
	{
		int t = b[x];
		b[x] = b[y];
		b[y] = t;
	}
	static boolean B_search(int n,int b[])
	{
		int low = 0,high = b.length-1;
		
		while(low<=high)
		{
			int mid = ( low + high ) / 2;
			if(b[mid] == n)
			{
				return true;
			}
			else if(b[mid] > n)
			{
				high = mid - 1;
			}
			else
			{
				low = mid + 1;
			}
		}
		return false;
	}
	static void bubblesort(int[] b)
	{
		int len = b.length;
		for(int i = 0;i<len;i++)
		{
			for(int j = 0;j<len-i-1;j++)
			{
				if(b[j]>b[j+1])
				{
					swap(j, j+1,b);
				}
			}
		}
		
	}
	static void print(int b[])
	{
		for(int i = 0;i<b.length;i++)
			System.out.println("b["+i+"] = "+b[i]);
	}
}


二分查找:面试题
 
给个一个有序数组,如果往这个数组中存储一个元素,并保证这个数组还是有序的,那么这个元素的存储的角标如何获取

import java.util.Arrays;
import java.util.Scanner;


import javax.swing.text.DefaultEditorKit.InsertBreakAction;


import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;




public class Main 
{
	public static void main(String[] args)
	{
	//	int[] b = new int[]{1,2,3,4,5};同下
		
		Scanner cin = new Scanner(System.in);
		
		int b[] = new int[11];
		for(int i = 0;i<11;i++)
		{
			b[i] = cin.nextInt();
		}
		bubblesort(b);
		System.out.println("冒泡排序结果如下:");
		print(b);
		System.out.print("请输入你要查找的值:");
		int n;
		n = cin.nextInt();
		System.out.println("手写二分查找:");
		int flag = B_search(n,b);
		
		System.out.println("下标为:\t"+flag);
			int wz = cin.nextInt();
		int indx = Arrays.binarySearch(b, wz);//返回的是个:负的插入点下标再减1
		//返回负数,代表着不存在,如果我往里放这个元素,插入点在哪,负数指的是:负的插入点下标,再-1
		//返回正数,代表着其下标
		/*为什么要减1?
		 * 如果要插入的元素比数组元素的第一个还小,不减1,会返回0,而返回0,是不是就这个数代表着不存在,故要减1
		 * */
		System.out.println("调用二分查找:");
		System.out.println("下标为:\t"+indx);
		cin.close();
	}
	
	static void swap(int x,int y,int[] b)
	{
		int t = b[x];
		b[x] = b[y];
		b[y] = t;
	}
	static int B_search(int n,int b[])
	{
		int low = 0,high = b.length-1;
		
		while(low<=high)
		{
			int mid = ( low + high ) / 2;
			if(b[mid] == n)
			{
				return mid;
			}
			else if(b[mid] > n)
			{
				high = mid - 1;
			}
			else
			{
				low = mid + 1;
			}
		}
		return low;
	}
	static void bubblesort(int[] b)
	{
		int len = b.length;
		for(int i = 0;i<len;i++)
		{
			for(int j = 0;j<len-i-1;j++)
			{
				if(b[j]>b[j+1])
				{
					swap(j, j+1,b);
				}
			}
		}
		
	}
	static void print(int b[])
	{
		for(int i = 0;i<b.length;i++)
			System.out.println("b["+i+"] = "+b[i]);
	}
}


查表法


import java.util.Scanner;


public class Main 
{
	/*
	 * 使用查表法
	
	 */
	
	/*查表法的应用:
	 * 有规律的,就可以使用查表法
	 * */
	public static void main(String[] args)
	{
		Scanner cin = new Scanner(System.in);
		
		{
			int x = cin.nextInt();
			/*
			 * 查询星期
			 * */
			System.out.println(Find(x));
			
			/*
			 * 查询月份
			 * */
			int y = cin.nextInt();
			System.out.println(Findd(y));
			cin.close();
			
		}
		
	}
	public  static String Find(int x) 
	{
		if(x>7 || x<0)
		{
			return "输入错误";
		}
		String[] week = {"星期一 = Monday","星期二 = Tuesday","星期三 = Wednesday","星期四 = Thurseday","星期五 = Friday","星期六 = Saturday","星期天 = Sunday"};
		return week[x-1];
	}
	public  static String Findd(int x) 
	{
		if(x>12 || x<0)
		{
			return "输入错误";
		}
		String[] mon = {"一月 = January","二月  = Febary","三月 = March","四月 = April","五月 = May"
				,"六月 = June","七月 = July","八月 = August","九月   = Spetember","十月  = October","十一月  = November","十二月  = December"};
		return mon[x-1];
	}
	
}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值