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