排序演算法彙總(資料結構)

2021-10-23 04:43:17 字數 2863 閱讀 8270

1.氣泡排序

//氣泡排序

int a[20]

;int n;

for(

int i=

0;i1;i++

)

而對於氣泡排序有乙個優化的方法,優化在於當一次排序沒有進行過交換的時候,也就是之後的順序都是有序的時候,相當於整個序列都是有序的了。

//氣泡排序優化

int a[20]

;int n;

int falg;

//做乙個標記位來判斷之後需不需要換位

for(

int i=

0;i1;i++)}

//如若沒有進行過if(

!falg)

break

;}

演算法評價:1.演算法的時間複雜度是 0(n^2) 2.該演算法是穩定的(因為相對位置一直都沒變,就是在比較)

2.快速排序

排序過程:選擇乙個關鍵字,通常是序列的第乙個或者是最後乙個。然後經過一次排序將整個序列分成兩部分,左邊部分的值都小於選定關鍵字,右邊部分都大於關鍵字。依次開始對兩部分再進行快速排序,直到所有都有序。

偽**:

void

quick_sort

(elementtype s,

int low,

int high)

}

int

partition

(elementtype s,

int low,

int high)

a[low]

= pivot;

return low;

//此時low或者high就是pivot的最終位置

}

演算法評價:1.平均複雜度是0(nlogn) 2.演算法是不穩定的(因為需要將陣列進行排序換位分組)

3.直接插入排序

排序過程:相當於就是將s[i]插入到已經排好序的(0–s[i-1])這個序列當中,具體插入方法是,選中乙個大於他,但是前面乙個小於他的位置,然後將後面的位置全都向後移乙個。

偽**:

void

insertion_sort

(elementtype s,

int n)

}

演算法評價:1.最壞情況是o(n^2) 最好的情況就是原來就是有序的 o(n) 2.演算法是穩定的

4.希爾排序

排序過程:將序列以一定值分成乙個個部分序列,然後對每個部分序列進行直接插入排序。

偽**:

void

shell_sort

(elementtype s,

int n)

s[i]

= tmp;

}}

演算法評價:1.演算法的時間複雜度是 評價是:o(n^1.3),最好的情況是o(n) 2.該演算法是不穩定的

5.直接選擇排序

排序過程:就如名字所說,直接從未排序的序列中選擇最小的乙個,然後放到已經排好序的序列中,直到序列全部排序好。

偽**:

void

selectsort

(elementtype s,

int n)

if(min != i)

swap

(s[i]

,s[min]);

}}

演算法評價:1.演算法的時間複雜度是o(n^2) 2.演算法是不穩定的(如:(7) 2 5 9 3 4 [7] 1…當我們利用直接選擇排序演算法進行排序時候,(7)和1調換,(7)就跑到了[7]的後面了,原來的次序改變了,這樣就不穩定了.)

6.堆排序

排序過程:首先將序列以乙個類似於完全二叉樹的形式展現,然後排序成小頂堆或者大頂堆的形式,取出堆頂元素(取出方法:與最後乙個節點資料交換,再刪去最後節點),將修改後的堆重新排序成大頂堆或者小頂堆,繼續進行,直到全部排序完。

偽**:

/*調整成最大堆*/

void

heapadjust

(elementtype s,

int k,

int n)

k[s]

= tmp;

}void

heap_sort

(elementtype s,

int n)

}

演算法評價:1.時間複雜度是:o(nlogn) 2.該演算法不是穩定的(因為需要分組,且每組排序情況不一致)

7.歸併排序

排序過程:以二路為例:假定待排序列含有n個記錄,則可以看作n個有序的子表,每個子表的長度為1,然後兩兩歸併,得到n/2(向上取整)個長度為2或1的子表;再兩兩歸併,…一直重複,直到合併為乙個長度為n的有序表為止。

偽**:

#define maxsize 100

void

merge

(int

*list1,

int list1_size,

int*list2,

int list2_size)

void

merge_sort

(int s,

int n)

}

演算法評價:1.時間複雜度是o(nlogn) 2.該演算法是穩定的(雖然進行了分組,但是組與組之間的相對位置一直都是不變的)

資料結構之排序演算法 彙總

排序演算法應該是最基礎的演算法了,博主面試至今沒有面試官單就乙個排序演算法讓寫個 什麼的。本篇小博先對常見的排序演算法進行一下總結,方便日後檢視吧。主要內容包括 氣泡排序 快速排序 選擇排序 堆排序 插入排序 希爾排序 歸併排序。一 氣泡排序 如下 public static int bubbles...

tableau彙總資料排序(正常不能排序)

發現access資料庫裡,期間 這個表有問題,有它和 簡易工資表 做聯接時,不但資料庫反應超慢,而且出現問題,統計資料出現錯誤,一定要注意這個問題 如 烏海龐大興銳汽車銷售服務 只在2015年11月份工資時,能統計出2個人,而實際情況是 這個單位只在當年1月 2月各有一人。暫行解決辦法 一 錯誤找到...

資料結構經典演算法彙總

迴圈佇列 除錯成功 include iostream.h class ssqueue ssqueue int insert const int item if isfull int out int getsize int isempty empty retrun 1 int isfull full ...