算法(四)、时间复杂度、排序、查找

一、时间复杂度

1、 常数阶O(1)

package test;
public class CCC {
public static void main(String[] args) {
int sum=100;
int n=100;
sum = sum+n;
System.out.println(sum);
}
}

2、线性阶O(n)

package test;
public class CCC {public static void main(String[] args) {int sum=0;int n=100;for(int i=1;i<=n;i++){sum = sum+i;}System.out.println(sum);}
}

3、 对数阶O(Log2 n)

package test;
public class CCC {public static void main(String[] args) {int n=100;for(int i=1;i<=n;i++){i=i*2;System.out.println(i);}}
}

4、 平方阶O(n2)

例1:

int sum=0;
int n=100;
for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){sum = sum+i;}
}
System.out.println(sum);

例2:

int n=100;
for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){System.out.println(j);}
}

当i=1时执行n次,i=2时执行n-1次,......当i=n-1时执行了1次,总共执行的次数为:

![](https://s1.51cto.com/images/blog/201801/01/b289b1d3d5970b69aa5337d18befb62e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

因此为时间复杂度为:O(n2)

**5、 时间复杂对耗费时间由小到大排序:**

![](https://s1.51cto.com/images/blog/201801/01/10c94c4e3f446104c49e036e7415fd8b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

二、常用算法

总结了以下几种常用算法:找出最大值、冒泡排序、选择排序、快速排序、插入排序、希尔排序

2、遍历数组,找出数组中的最大值

public class Abc{int[] b=new int[10];void B(){for(int i=0;i<b.length;i++){b[i]=(int)(Math.random()*100);System.out.println("数组的第"+i+"个值为:"+b[i]);}}int max=b[0];void A(){for(int i=0;i<b.length;i++){int c=b[i];if(b[i]>=max){max=b[i];}}System.out.println("数组的最大值为:"+max);}
}

3、冒泡排序

import java.util.Arrays;
public class Def {public static void DDD(){int[] d={15,6,3,89,54,34};System.out.println("原始数组为:"+Arrays.toString(d));for(int i=0;i<=d.length;i++){for(int j=0;j<d.length-1-i;j++){if(d[j]>d[j+1]){int t=d[j];d[j]=d[j+1];d[j+1]=t;}}}System.out.println("冒泡后数组为:"+Arrays.toString(d));}
}

4、选择排序

package test;
public class CCC {
public static void main(String[] args) {
int[] abc={1,76,54,100,65,34,2,19,40};
System.out.print("快速排序前数组为:");
for(int num:abc){
System.out.print(num+" ");
}
for(int i=1;i<abc.length-1;i++){
int k=i;
for(int j=i+1;j<abc.length;j++){
if( abc[j]<abc[k]){
k=j;
}
}
if(i !=k){
int tmp=abc[i];
abc[i]=abc[k];
abc[k]=tmp;
}
}
System.out.println();
System.out.print("快速排序前数组为:");
for(int num:abc){
System.out.print(num+" ");
}
}
}

5、快速排序

package cn.qiuuuu.test;
public class sortQuick {public static void sort(int array[],int low,int high){int i,j;int index;if(low>=high){return;}i=low;j=high;index=array[i];while(i<j){while(i<j&&array[j]>=index){j--;}if(i<j){array[i++]=array[j];}while(i<j&&array[i]<index){i++;}if(i<j){array[j--]=array[i];}array[i]=index;sort(array,low,i-1);sort(array,i+1,high);}}public static void quickSort(int array[]){sort(array,0,array.length-1);}public static void main(String[] args) {int i=0;int a[]={5,4,9,8,7,6,0,1,3,2};int len=a.length;quickSort(a);for(i=0;i<len;i++){System.out.println(a[i]+" ");}}
}

6、插入排序

public static int[] insertSort(int[] a){for (int i = 1; i < a.length; i++) {//待插入元素int temp = a[i];int j;for (j = i-1; j>=0; j--) {//将大于temp的往后移动一位if(a[j]>temp){a[j+1] = a[j];}else{break;}}a[j+1] = temp;//插入进来}for(int i=0;i<a.length;i++){System.out.println(a[i]);}return a;}

7、希尔排序

int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,33,85,29};
int d = a.length/2; //设置增量
while(true){for(int i=0;i<d;i++){for(int j=i;j+d<a.length;j+=d){int temp;if(a[j]>a[j+d]){temp=a[j];a[j]=a[j+d];a[j+d]=temp;}}
}
if(d==1){break;}d--;}

三、查找算法

1、二分查找/折半查找

public class BinarySearch {public static void main(String[] args){int[] arr={1,2,3,4,5};Arrays.sort(arr);binarySearch(arr,4,0,arr.length-1);System.out.println(binarySearch(arr,4,0,arr.length-1));System.out.println(arr[binarySearch(arr,4,0,arr.length-1)]);}public static int binarySearch(int[] arr,int key,int left,int right){if(key<arr[left]||key>arr[right]||left>right){return -1;}int middle=(left+right)/2;if(arr[middle]<key){return binarySearch(arr,key,middle+1,right);}else if(arr[middle]>key){return binarySearch(arr,key,left,middle-1);}else{return middle;}}
}

2、

转载于:https://blog.51cto.com/doublelinux/1974823

算法(四)、时间复杂度、排序、查找相关推荐

  1. 算法的时间复杂度排序

    算法的时间复杂度排序 O(1) < O( l o g 2 n log_2n log2​n) < O( n n n) < O( n l o g 2 n nlog_2n nlog2​n) ...

  2. 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作

    目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...

  3. 数据结构与算法—二叉排序(查找)树

    目录 前言 树 二叉树 二叉排序(搜索)树 概念 构造 主要方法 findmax(),findmin() isContains(int x) insert(int x) delete(int x) 完 ...

  4. C++算法四:顺序查找

    顺序查找与折半查找(二分查找) 没有顺序排序的数据:只能顺序查找,如果数据排序了使用顺序查找和折半查找都可以. 顺序查找:速度慢 例如:100万个数据,平均要查找50万次 #include<io ...

  5. Python 算法:递归 排序 查找

    一.算法概念 算法:就是一个计算过程,解决问题的方法. 二.递归 2.1.递归特点 递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,它往往使算法的描述简洁而且易于理解. 递归算法解决问题的 ...

  6. 比较排序算法的时间复杂度 c语言,c语言四种排序算法时间复杂度比较(10页)-原创力文档...

    1.方案设计: 我这次实验通过随机生成30000个随机数,把随机数存到数组中,用这同一组随机数据分别进行四种排序,直接插入排序.直接选择排序.冒泡排序和快速排序.还通过了调用txt文件把运算所需时间导 ...

  7. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  8. iOS 排序算法总结、二分法查找

    iOS 排序算法总结.二分法查找 还有一个:二分插入排序  平均时间O(n2)   稳定 1.插入排序 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个 ...

  9. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  10. 算法与数据结构 -- 排序和查找(五)

    一.排序算法 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 堆排序 桶排序 二.算法实现 冒泡排序 每次比较相邻两个元素,若不符合大小关系,则交换元素位置.让最小的(或最大)元素在列表尾 ...

最新文章

  1. DeepMind提图像生成的递归神经网络DRAW,158行Python代码复现
  2. 设计模式总结: 5种创建型,7种结构型,11种行为型
  3. 菜鸟系列docker——docker基本概念(1)
  4. watch深度监听数组_vue watch普通监听和深度监听实例详解(数组和对象)
  5. 驱动开发中常用的操作和小知识
  6. 深度学习(六十八)darknet使用
  7. 图 子类 数据库_构造知识图的语义模型
  8. 单元测试 : Googel test测试框架
  9. 使用Web Service Interface. (转)
  10. 手机股票软件哪个好?这几款炒股app你不能错过!
  11. 上星远程控制实验(一)
  12. 利息浅谈(五)——我的投资收益率怎么算?
  13. Fingerprint2 生成浏览器指纹应用
  14. 【NOI OJ】1818 红与黑
  15. 决OBS Studio录制的视频为黑屏的问题
  16. redit mysql_这就是Reddit十年来的成就
  17. Linux 搭建zookpeer集群和配置
  18. Python调用高德地图API实现经纬度换算、地图可视化
  19. 系统(层次)聚类法及Spss实现
  20. Java基础语言(可查阅)

热门文章

  1. AutoCad 二次开发(一) 开发环境搭建
  2. Oracle内存结构详解(四)--Oracle SGA其他组成部分
  3. cocos2d 浅析
  4. Hadoop在业界的使用情况
  5. Autodesk MapGuide Enterprise 2012开发技术入门培训视频录像下载
  6. 谷歌换帅 佩奇将接任CEO[转]
  7. 嵌入式工具——strace
  8. OpenCV---模板匹配
  9. VC开发数据库基础之ADO篇
  10. 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口