算法(四)、时间复杂度、排序、查找
一、时间复杂度
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=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;jd[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
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=index){ j--; } if(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
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;ia[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(keyarr[right]||left>right){ return -1; } int middle=(left+right)/2; if(arr[middle] key){ return binarySearch(arr,key,left,middle-1); }else{ return middle; } }}
2、