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

2022-09-19 02:06:09 字數 1411 閱讀 9771

1. 時間複雜度

2. 簡單排序演算法

(1)選擇排序

public class selectionsoft ;

selectionsoft(arr);

}public static void selectionsoft(int arr)}}

for(int i:arr)}}

​​

(2)氣泡排序:從第i個數一直到n-1個數上一直找最小值或最大值,交換。

(3)插入排序:

(1)可以實現兩個數的值進行交換

int a=1,b=2;(a,b的值必須在記憶體中為兩塊不同的區域)

a = a^b;    //a = 1^2,b = 2

b = a^b;//a = 1^2,b = 1^2^2 = 1^0 = 1

a = a^b;//a = 1^2^1 = 0^2 = 2,b=1;

(2) 尋找n個數**現了奇數次的數

public static void main(string args)

;printoddtimesnum(arr);}​

​printoddtimesnum(int arr)

//此時eor為這兩個要求的數的異或,eor!=0。

//eor!=0,這兩個出現了奇數次的數在同位次二進位制位中必然乙個為1乙個為0

//eor的二進位制位上必然有一位為1

int rightone = eor ^ (~eor+1);//提取eor二進位制位裡最右邊的1,其餘二進位制位全部變為0

int onlyone = 0;

for(int cur:arr)

}//執行完迴圈後,這個onlyone為待求的某乙個數

system.out.println(onlyone+" "+(onlyone^eor));//eor^onlyone 為待求的另外乙個數。

(1)二分查詢 o(logn)(在有序陣列裡查詢某個數是否存在)

public static void binarysoft(int arr,int x)

​else if(x

else}}

(2) 在乙個有序陣列中,找》=某個數最左側的位置

public static void main(string args)

;binarysoft(arr,4);

}public static void binarysoft(int arr,int x)

{int min = 0,max = arr.length;

int flag = 0;

while(minelse if(x(3) 區域性最小值問題

1 時間複雜度和簡單排序

常數的時間操作 乙個操作如果和資料量沒有關係,每次都是固定時間操作,叫做常數操作。時間複雜度常用o 讀作big o 來表示。具體來說,在常數運算元量的表示式中,只要高階項,不要低階項,也不要高階項的係數,剩下的部分記為f n 那麼時間複雜度記為 o f n 對乙個長度為n的陣列進行排序 演算法 依次...

01 時間複雜度 空間複雜度

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

1 時間複雜度

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