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