Java数据结构与经典算法——高手必会

  • 格式:doc
  • 大小:767.00 KB
  • 文档页数:79

下载文档原格式

  / 79
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) {