1 時間複雜度和簡單排序

2021-08-22 06:04:47 字數 3304 閱讀 2726

①常數的時間操作:乙個操作如果和資料量沒有關係,每次都是固定時間操作,叫做常數操作。

②時間複雜度常用o(讀作big o)來表示。具體來說,在常數運算元量的表示式中,

只要高階項,不要低階項,也不要高階項的係數,剩下的部分記為f(n),那麼時間複雜度記為

o(f(n))。

對乙個長度為n的陣列進行排序:

演算法:依次從0—-n-1個數中選出最小的數,放在陣列的0位置

從1—n-2個數中選出最小的數,放在陣列的1位置

從2—n-3個數中選出最小的數,放在陣列的2位置

time=n+(n-1)+(n-2)**+1=(n+1)n/2

只要高階項,不要低階項,也不要高階項的係數

所以時間複雜度位o(n*n)

乙個有序陣列a,另乙個無序陣列b,請列印b中所有不在a中的數,a陣列的長度為n,

b陣列的長度為m。

·演算法1:對於陣列b中的每乙個數,都在a中通過遍歷的方式找一下;

·演算法2:對於陣列b中的每乙個數,都在a中通過二分的方式查詢一下;

·演算法3:先把b中的數進行排序,然後用類似外排的方式列印所有不在a中出現的數。

計算時間複雜度:

1、o(m*n)

2、①對有序的陣列,二分查詢的時間複雜度o(logn) 底數為2

在1,3,5,6,8,10中找出x

l………………r

mid=(l+r)/2 ,根據,陣列[mid]與x比較大小的結果,確定下一次二分的方向,n個數二分最多能分logn次。

②所以演算法2的時間複雜度為 o(m*logn)

3、 ①對無序陣列使用基於比較的排序演算法o(m*logm)

②1,3,5,7,10,16,18;2,4,8,17,20

….a…………………….b…………

使用類似外排的方式:如果a

//o(n*n)

package day01;

public

class

day01_bubblesort

for(int end=arr.length-1;end>0;end--)}}

}public

static

void

swap(int arr,int i,int j)

public

static

void

main(string args) ;

day01_bubblesort.bubblesort(a);

for (int i=0;ipublic

class

day01_selectionsort

for(int i=0;i1;i++)

public

static

void

main(string args) ;

day01_selectionsort.selectionsort(a);

for(int i=0;ipackage day01;

/*輸入:乙個含有n個元素的陣列

* 1、遍歷陣列的下標 1.......n-1

* 2、依次把下標所對應的元素與前乙個元素進行比較,小於之前的元素就交換,並不斷比較

**時間複雜度o(n^2)

** 最好o(n)

* 最壞o(n^2)

** */

public

class

day01_instertionsorting

for (int i=1;ifor(int j=i;j>=0;j--)

else }}

}private

static

void

swap(int arr, int i, int j)

public

static

void

main(string args) ;

day01_instertionsorting.insertionsorting(arr);

for (int arr_ele:arr)}}

public

class

day01_recursion

int mid=(l+r)/2;

int maxleft=getmax(arr,l,mid);

int maxright=getmax(arr,mid+1,r);

return math.max(maxleft,maxright);

}public

static

void

main(string args) ;

system.out.println(day01_recursion.getmax(arr,0,8));}}

設a>=1,b>1為常數,f(n)為函式,t(n)為非負整數,且

t(n)=at(n/b)+f(n)

a是歸約後子問題的個數

b是子問題的規模

f(n)是歸約過程及組合子問題解的工作量

如歸併排序:t(n)=2t(n/2)+o(n)

帶入公式其時間複雜度為o(n*logn)

package day01;

/*歸併排序的時間複雜度是o(n*lgn)

t(n)=2t(n/2)+o(n)

* */

public

class day01_mergesort

sortprocess(arr,0,arr.length-1);

}public

static

void

sortprocess(intarr,int l,int r)

int mid=(l+r)/2;

sortprocess(arr,l,mid);//t(2/n)

sortprocess(arr, mid+1, r);//t(2/n)

merge(arr,l,mid,r);//o(n)

}public

static

void

merge(int arr,int l,int mid,int r)

while (p1<=mid)

while (p2<=r)

for (i=0;ipublic

static

void

main(string args) ;

day01_mergesort.mergesort(arr);

for (int i=0;iout.println(arr[i]);}}

}

2022 1 6 時間複雜度及簡單排序演算法

1.時間複雜度 2.簡單排序演算法 1 選擇排序 public class selectionsoft selectionsoft arr public static void selectionsoft int arr for int i arr 2 氣泡排序 從第i個數一直到n 1個數上一直找最...

1 時間複雜度

演算法的計算成本涵蓋許多方面,為確定計算成本的度量標準,我們不妨從計算速度這一重要因素入手。但是這一問題並不是容易直接上手回答,原因在於,運算時間是由許多因素綜合作用而決定的。即使是同一演算法,對於不同的輸入所需的運算時間並不相同。問題規模往往是決定計算成本的主要因素。一般的,問題規模越相近,相應的...

01 時間複雜度 空間複雜度

1 時間頻度 乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。2 時間複雜度 若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n f ...