演算法學習筆記(二) 初級排序演算法

2021-09-26 01:37:33 字數 2437 閱讀 9899

時間複雜度(time complexity):

總運算次數表示式中受n的變化影響最大的那一項(不含係數)(注:若演算法中語句執行次數為乙個常數,則時間複雜度為o(1))
若t(n)/f(n)求極限可得到一常數c,則時間複雜度t(n)=o(f(n))。
隨著模組n的增大,演算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,演算法的時間複雜度越低,演算法的效率越高。
空間複雜度(space complexity):

乙個演算法在執行過程中臨時占用儲存空間大小的量度(包括程式**所占用的空間,輸入資料所占用的空間和輔助變數所占用的空間這三個方面。)
注:
氣泡排序步驟:(公升序)

首先設a[0]為最小數然後與後續元素比較,若某一元素比a[0]x小則交換位置,然後a[0]不變,設a[1]]第二小的數,按照上面方法在剩下元素找比a[1]小的數。。。

1 #include2 #include

3int

main()420

}21}22

for(i=0;i)

23 printf("

%d "

,a[i]);

24return0;

25 }

』選擇排序步驟:(公升序)

首先找到陣列中最小的數,與陣列第一位數交換位置(如果最小數是本身與本身交換)。接著在剩下的數中找第二小的數,與陣列第二位數交換位置(如果第二小數是本身與本身交換)........按照相同步驟依次執行最後乙個元素。

資料交換n次,資料比較(n-1)+(n-2)+........+3+2+1=n*(1+n-1)/2=n^2/2次(最後乙個元素與自身交換)

時間複雜度:o(n2)

空間複雜度:o(1)

1 #include2 #include 

3int

main()421

}22 a[temp]=a[i];//

交換 23 a[i]=min;

24}

25for(i=0;i)

26 printf("

%d "

,a[i]);

27return0;

28 }

插入排序直接插入排序步驟:(公升序)

將原陣列分成兩組,一組為已排好序的陣列a,另一組為亂序陣列b。陣列a倒序(a[length-1])每個元素依次與陣列b的乙個元素比較(從b[0]開始),若a組某元素比b組元素大,a組元素後退一位為,b組元素騰出空間,然後b組推下乙個元素.

時間複雜度:o(n2)

空間複雜度:o(1)

希爾排序

步驟:(公升序)

為加快速度的插入排序,交換不相鄰的元素將陣列部分變有序。使陣列間隔h(h會改變)個元素有序。h在變化前,程式使h個元素間隔的小陣列有序。

例:2—6—70(小陣列每個元素間隔h個元素)..

時間複雜度:

空間複雜度:o(1)

#include#include

//伸序

int less(int a,int i,int

j)

int

main()

}h/=3

; }

for(i=0;i)

printf(

"%d

",a[i]);

return0;

}

疑問1:出現6—4—5這樣的小陣列,排序後還是為無序小陣列?

答:並不會出現6—4—5這樣的小陣列,因為:

j=h 為 6—4小陣列,會重新排序為有序4—6小陣列

j=2h  為4—6—5小陣列,會重新排序為有序4—5—6小陣列

疑問2:如何選擇h的遞增數列?

書中用的的3*h+1與複雜遞增序列的效能相近,但比較簡單,所以書中將該遞增數列提出作為參考 

並未找到最優遞增數列   

優勢:希爾排序比插入排序和選擇排序快得多,並且陣列越大,優勢越大。 

探索初級演算法學習筆記 快速排序法

includevoid swap int a,int b void quicksort int nums,int begin,int end swap nums begin nums i quicksort nums,begin,i 1 quicksort nums,i 1,end int main...

排序演算法學習筆記

直接插入 二分法插入 希爾插入 氣泡排序 快速排序 插入排序是一種遞迴思想,由n 1趟排序組成。初始時,只考慮陣列下標0,只有乙個元素,預設是有序的。然後第一趟 對下標為1的元素進行排序,保證陣列 0,1 上的元素有序 第二趟 對下標2處的元素進行排序,保證陣列 0,2 上的元素有序 第n 1趟對下...

氣泡排序演算法 演算法學習筆記

最近準備換工作,然後面了幾家公司,收到了乙份還算滿意的offer。面試過程中發現大公司都會喜歡面一些演算法題。對於經常關注演算法的人而言可能並不難,因為都是一些基礎題,比如快速排序 氣泡排序 二叉樹等等。但是對於平時工作從不關心演算法的人而言那可真的夠頭大的。今天覆習了氣泡排序,順便記錄下。也提醒下...