Java数据结构与经典算法——高手必会
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.大O表示法:粗略的量度方法即算法的速度是如何与数据项的个数相关的
算法大O表示法表示的运行时间
线性查找 O(N)
二分查找 O(logN)
无序数组的插入 O(1)
有序数组的插入 O(N)
无序数组的删除 O(N)
有序数组的删除 O(N)
O(1)是最优秀的,O(logN)良好,O(N)还可以,O(N2)稍差(在冒泡法中见到)
2.排序
public class JWzw {
//插入排序
public void insertArray(Integer []in){
int tem = 0;
int num = 0;
int upnum = 0;
for (int i = 0; i < in.length; i++) {
for (int j = i - 1; j >= 0; j--) {
num++;
if (in[j+1] < in[j]) {
tem = in[j+1];
in[j+1] = in[j];
in[j] = tem;
upnum++;
}
else
{
break;
}
}
}
for (int i = 0; i < in.length; i++) {
System.out.print(in[i]);
if(i < in.length - 1)
{
System.out.print(",");
}
}
System.out.println();
System.out.println("插入排序循环次数:" + num);
System.out.println("移动次数:" + upnum);
System.out.print("\n\n\n");
}
//选择排序
public void chooseArray(Integer []in){
int tem = 0;
int num = 0;
int upnum = 0;
for(int i = 0;i < in.length;i++)
{
for(int j = i;j < in.length - 1;j++){
num++;
if(in[j+1] < in[j]){
tem = in[j+1];
in[j + 1] = in[j];
in[j] = tem;
upnum++;
}
}
}
for (int i = 0; i < in.length; i++) {
System.out.print(in[i]);
if(i < in.length - 1)
{
System.out.print(",");
}
}
System.out.println();
System.out.println("选择排序循环次数:" + num);
System.out.println("移动次数:" + upnum);
System.out.print("\n\n\n");
}
//冒泡排序
public void efferArray(Integer []in){
int tem = 0;
int num = 0;
int upnum = 0;
for(int i = 0;i < in.length;i++){
for(int j = i;j < in.length - 1;j++)
{
num++;
if(in[j+1] < in[i]){
tem = in[j+1];
in[j+1] = in[i];
in[i] = tem;
upnum++;
}
}
}
for (int i = 0; i < in.length; i++) {
System.out.print(in[i]);
if(i < in.length - 1)
{
System.out.print(",");
}
}
System.out.println();
System.out.println("冒泡排序循环次数:" + num);
System.out.println("移动次数:" + upnum);
System.out.print("\n\n\n");
}
//打印乘法口诀
public void printMulti(){
for (int j = 1; j < 10; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(i + " * " + j + " = " + j * i + "\t");
}
System.out.print("\t\n");
}
System.out.print("\n\n\n");
}
//打印N * 1 + N * 2 + N * 3 =num的所有组合
public void printNumAssemble(int num){
for (int i = 0; i < num + 1; i++) {
for (int j = 0; j < num / 2 +1; j++) {
for (int in = 0; in < num / 3 + 1; in++) {
if (i * 1 + j * 2 + in * 3 == num) {