java經常使用算法(四)、時間複雜度、排序、查找

Java經常使用算法(四)、時間複雜度、排序、查找java

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


二、線性階O(n)app

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

三、 對數階O(Log2 n)dom

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

四、 平方階O(n2)ide

例1:ui

  


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:spa

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次,總共執行的次數爲:3d

![](https://s4.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=)blog

所以爲時間複雜度爲:O(n2)

**五、 時間複雜對耗費時間由小到大排序:**

![](https://s4.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);
    }
}


test1 = [23,32,1,34,33,4,0,3]
a = 0
for i in range(len(test1)):
    if test1[i] > a:
        a = test1[i]
print(a)


三、冒泡排序


bubbleSort.gif

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


d = [23,4,34,5,12,2,34,0,12]
for i in range(len(d)):
    for j in range(len(d)-i-1):
        if(d[j] > d[j+1]):
            t = d[j]
            d[j] = d[j+1]
            d[j+1] = t
print(d)
==> d:[0, 2, 4, 5, 12, 12, 23, 34, 34]



四、選擇排序

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+" ");
    }
    }
}


import sys
A = [12,2,34,23,12,45,3,23,10,0,2]
for i in range(len(A)):
    min_index = i
    for j in range(i+1,len(A)):
        if(A[min_index] > A[j]):
            min_index = j
    A[i],A[min_index] = A[min_index],A[i]
print(A)
==》[0, 2, 2, 3, 10, 12, 12, 23, 23, 34, 45]


五、快速排序


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]+" ");
        }
    }
}




六、插入排序


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




七、希爾排序


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


3、查找算法

一、二分查找/折半查找


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



二、

相關文章
相關標籤/搜索