JAVA自学教程之(排序+二分查找+查表法)



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

PS:算法是不分语言的

 

排序:

1.抽取

2.交换位置

 

 

  1. import javax.swing.text.DefaultEditorKit.InsertBreakAction;
  2. import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
  3. public class Main
  4. {
  5.     public static void main(String[] args)
  6.     {
  7.     //  int[] b = new int[]{1,2,3,4,5};同下
  8. int b[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};//同上
  9.         bubblesort(b);
  10.         System.out.println(“冒泡排序结果如下:”);
  11.         print(b);
  12.         int c[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};
  13.         seletsort(c);
  14.         System.out.println(“选择排序结果如下:”);
  15.         print(c);
  16.         int d[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};
  17.         Insersort(d);
  18.         System.out.println(“\n插入排序结果如下:”);
  19.         print(d);
  20.     }
  21.     static void Insersort(int b[])
  22.     {
  23.         int len = b.length;
  24.         for(int i = 1;i<len;i++)
  25.         {
  26.             if(b[i]<b[i-1])
  27.             {
  28.                 int t = b[i],j;
  29.                 b[i] = b[i-1];
  30.                 for(j = i-2;j>=0 && b[j] > t;j–)
  31.                 {
  32.                     b[j+1] = b[j];
  33.                 }
  34.                 b[j+1] = t;
  35.             }
  36.         }
  37.     }
  38.     static void swap(int x,int y,int[] b)
  39.     {
  40.         int t = b[x];
  41.         b[x] = b[y];
  42.         b[y] = t;
  43.     }
  44.     /*static void swap(int a,int b)不要写成这种方式,只是单纯的交换了两个数,
  45.      *                              但是b数组里这两个数并没有交换
  46.     {
  47.         int t = a;a = b;b = t;
  48.     }*/
  49.     static void bubblesort(int[] b)
  50.     {
  51.         int len = b.length;
  52.         for(int i = 0;i<len;i++)
  53.         {
  54.             for(int j = 0;j<len-i-1;j++)
  55.             {
  56.                 if(b[j]>b[j+1])
  57.                 {
  58.                     swap(j, j+1,b);
  59.                 }
  60.             }
  61.         }
  62.     }
  63.     static void seletsort(int a[])
  64.     {
  65.         int len = a.length;
  66.         for(int i = 0;i<len-1;i++)
  67.         {
  68.             for(int j = i+1;j<len;j++)
  69.             {
  70.                 if(a[i] > a[j])
  71.                 {
  72.                     swap(i, i+1,a);
  73.                 }
  74.             }
  75.         }
  76.     }
  77.     static void print(int b[])
  78.     {
  79.         for(int i = 0;i<b.length;i++)
  80.             System.out.println(“b["+i+"] = “+b[i]);
  81.     }
  82. }
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]);
	}
}
  1. import javax.swing.text.DefaultEditorKit.InsertBreakAction;
  2. import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
  3. public class Main
  4. {
  5.     public static void main(String[] args)
  6.     {
  7.     //  int[] b = new int[]{1,2,3,4,5};同下
  8.         Scanner cin = new Scanner(System.in);
  9.         int b[] = new int[11];
  10.         for(int i = 0;i<11;i++)
  11.         {
  12.             b[i] = cin.nextInt();
  13.         }
  14.         bubblesort(b);
  15.         System.out.println(“冒泡排序结果如下:”);
  16.         print(b);
  17.         System.out.print(“请输入你要查找的值:”);
  18.         int n;
  19.         n = cin.nextInt();
  20.         boolean flag = B_search(n,b);
  21.         if(flag==true)
  22.             System.out.println(“YES”);
  23.         else
  24.             System.out.println(“NO”);
  25.         cin.close();
  26.     }
  27.     static void swap(int x,int y,int[] b)
  28.     {
  29.         int t = b[x];
  30.         b[x] = b[y];
  31.         b[y] = t;
  32.     }
  33.     static boolean B_search(int n,int b[])
  34.     {
  35.         int low = 0,high = b.length-1;
  36.         while(low<=high)
  37.         {
  38.             int mid = ( low + high ) / 2;
  39.             if(b[mid] == n)
  40.             {
  41.                 return true;
  42.             }
  43.             else if(b[mid] > n)
  44.             {
  45.                 high = mid – 1;
  46.             }
  47.             else
  48.             {
  49.                 low = mid + 1;
  50.             }
  51.         }
  52.         return false;
  53.     }
  54.     static void bubblesort(int[] b)
  55.     {
  56.         int len = b.length;
  57.         for(int i = 0;i<len;i++)
  58.         {
  59.             for(int j = 0;j<len-i-1;j++)
  60.             {
  61.                 if(b[j]>b[j+1])
  62.                 {
  63.                     swap(j, j+1,b);
  64.                 }
  65.             }
  66.         }
  67.     }
  68.     static void print(int b[])
  69.     {
  70.         for(int i = 0;i<b.length;i++)
  71.             System.out.println(“b["+i+"] = “+b[i]);
  72.     }
  73. }


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]);
	}
}

 

 

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

  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3. import javax.swing.text.DefaultEditorKit.InsertBreakAction;
  4. import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
  5. public class Main
  6. {
  7.     public static void main(String[] args)
  8.     {
  9.     //  int[] b = new int[]{1,2,3,4,5};同下
  10.         Scanner cin = new Scanner(System.in);
  11.         int b[] = new int[11];
  12.         for(int i = 0;i<11;i++)
  13.         {
  14.             b[i] = cin.nextInt();
  15.         }
  16.         bubblesort(b);
  17.         System.out.println(“冒泡排序结果如下:”);
  18.         print(b);
  19.         System.out.print(“请输入你要查找的值:”);
  20.         int n;
  21.         n = cin.nextInt();
  22.         System.out.println(“手写二分查找:”);
  23.         int flag = B_search(n,b);
  24.         System.out.println(“下标为:\t”+flag);
  25.             int wz = cin.nextInt();
  26.         int indx = Arrays.binarySearch(b, wz);//返回的是个:负的插入点下标再减1
  27.         //返回负数,代表着不存在,如果我往里放这个元素,插入点在哪,负数指的是:负的插入点下标,再-1
  28.         //返回正数,代表着其下标
  29.         /*为什么要减1?
  30.          * 如果要插入的元素比数组元素的第一个还小,不减1,会返回0,而返回0,是不是就这个数代表着不存在,故要减1
  31.          * */
  32.         System.out.println(“调用二分查找:”);
  33.         System.out.println(“下标为:\t”+indx);
  34.         cin.close();
  35.     }
  36.     static void swap(int x,int y,int[] b)
  37.     {
  38.         int t = b[x];
  39.         b[x] = b[y];
  40.         b[y] = t;
  41.     }
  42.     static int B_search(int n,int b[])
  43.     {
  44.         int low = 0,high = b.length-1;
  45.         while(low<=high)
  46.         {
  47.             int mid = ( low + high ) / 2;
  48.             if(b[mid] == n)
  49.             {
  50.                 return mid;
  51.             }
  52.             else if(b[mid] > n)
  53.             {
  54.                 high = mid – 1;
  55.             }
  56.             else
  57.             {
  58.                 low = mid + 1;
  59.             }
  60.         }
  61.         return low;
  62.     }
  63.     static void bubblesort(int[] b)
  64.     {
  65.         int len = b.length;
  66.         for(int i = 0;i<len;i++)
  67.         {
  68.             for(int j = 0;j<len-i-1;j++)
  69.             {
  70.                 if(b[j]>b[j+1])
  71.                 {
  72.                     swap(j, j+1,b);
  73.                 }
  74.             }
  75.         }
  76.     }
  77.     static void print(int b[])
  78.     {
  79.         for(int i = 0;i<b.length;i++)
  80.             System.out.println(“b["+i+"] = “+b[i]);
  81.     }
  82. }
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]);
	}
}

 

查表法

 

 

  1. import java.util.Scanner;
  2. public class Main
  3. {
  4.     /*
  5.      * 使用查表法
  6.      */
  7.     /*查表法的应用:
  8.      * 有规律的,就可以使用查表法
  9.      * */
  10.     public static void main(String[] args)
  11.     {
  12.         Scanner cin = new Scanner(System.in);
  13.         {
  14.             int x = cin.nextInt();
  15.             /*
  16.              * 查询星期
  17.              * */
  18.             System.out.println(Find(x));
  19.             /*
  20.              * 查询月份
  21.              * */
  22.             int y = cin.nextInt();
  23.             System.out.println(Findd(y));
  24.             cin.close();
  25.         }
  26.     }
  27.     public  static String Find(int x)
  28.     {
  29.         if(x>7 || x<0)
  30.         {
  31.             return “输入错误”;
  32.         }
  33.         String[] week = {“星期一 = Monday”,”星期二 = Tuesday”,”星期三 = Wednesday”,”星期四 = Thurseday”,”星期五 = Friday”,”星期六 = Saturday”,”星期天 = Sunday”};
  34.         return week[x-1];
  35.     }
  36.     public  static String Findd(int x)
  37.     {
  38.         if(x>12 || x<0)
  39.         {
  40.             return “输入错误”;
  41.         }
  42.         String[] mon = {“一月 = January”,”二月  = Febary”,”三月 = March”,”四月 = April”,”五月 = May”
  43.                 ,”六月 = June”,”七月 = July”,”八月 = August”,”九月   = Spetember”,”十月  = October”,”十一月  = November”,”十二月  = December”};
  44.         return mon[x-1];
  45.     }
  46. }