排序演算法總結

2022-08-23 04:15:11 字數 1564 閱讀 5627

1 氣泡排序

排序思想:每次選出最大的放到序列末尾,序列每次去除最後的元素,直到剩下最後乙個元素排序結束。

特點:在尋找本輪最大元素時可以設定乙個標誌位,如果一輪下來標誌位沒變說明所有元素都以有序。平均時間複雜度為o(n^2)。

2 插入排序

排序思想:在對第i個元素進行新增時,前面i-1個元素已經排序結束,將第i個元素插入到前面i-1個元素的適當位置即可。

特點:當元素基本有序時只需要做比較和少量的換序即可。平均時間複雜度為o(n^2)。

遞迴實現的**:

template

void insert_sort(t a,int n)

a[k+1] = a; // k+1恰好是空出那個元素

}

3 歸併排序

排序思想:長度為n的序列可以分為兩個長度為n/2的序列,如果兩個長度為n/2的序列已經有序,那麼使用合併演算法【見附錄】合併即可,這樣問題的規模就減小為兩個長度為n/2序列的排序問題,遞迴即可。

特點:平均時間複雜度為o(n*logn)。

4 選擇排序

排序思想:每次從待排序

資料元素

中選出最小(或最大)的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。

特點:

選擇排序

是不穩定的排序方法,平均時間複雜度為o(n^2)。

5 堆排序

排序思想:使用待排序資料建立乙個堆,堆是這樣一種資料結構:所有父節點資料均大於(或小於)子節點資料。這樣每次取出根節點即可獲得有序序列。

特點:堆排序沒有使用額外的儲存空間!!平均時間複雜度是o(n^2)。

附錄:

合併演算法:

template

void merge(type a,int p,int q,int r)

堆操作:

1 元素上移:

void shift_up(int h,int i)

h[pos] = value;

}2 元素下移:

void shift_down(int h,int n,int i)

4 元素刪除

void delete_i(int h,int &n,int i)

5 刪除堆頂元素

int delete_max(int h,int &n)

堆建立:

void make_heap(int a,int h,int n)

}堆排序:

void heap_sort(int a,int n)

}

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...