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