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};同下 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 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.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];
- }
- }