九大经典算法之插入排序、希尔排序
生活随笔
收集整理的這篇文章主要介紹了
九大经典算法之插入排序、希尔排序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
01 插入排序(Insertion Sort)
原理:每次選擇一個(gè)元素,并且將這個(gè)元素和整個(gè)數(shù)組中的所有元素進(jìn)行比較,然后插入到合適的位置。
void insertion_sort(int arr[], int n) {int i,j;for (i = 1; i < n; i++) {int tmp = arr[i];for (j = i; j > 0 && arr[j - 1] > tmp; j--) {arr[j] = arr[j - 1];}arr[j] = tmp;} }空間效率:O(1)
時(shí)間效率:最好情況:O(n)? ?? ? ? ? ? 平均情況:O(N^2)? ? ??? ? ? ? ? ? ? ? ?最壞情況:O(N^2)
穩(wěn)定性(相同元素相對(duì)位置變化情況):穩(wěn)定
適用性:順序存儲(chǔ)的線性表
注:還有個(gè)折半插入排序,其原理就是查找插入位置時(shí),從中間開(kāi)始找起。
02 希爾排序(Shell Sort)
這個(gè)是插入排序的修改版,根據(jù)步長(zhǎng)由長(zhǎng)到短分組,進(jìn)行排序,直到步長(zhǎng)為1為止,屬于插入排序的一種。
//希爾排序-希爾增量 void shell_sort(int arr[], int n) {int j;for (int d = n / 2;d > 0;d /= 2) {for (int i = d;i < n;i++) {int temp = arr[i];for (j = i;j >= d && arr[j - d] > temp;j -= d)arr[j] = arrj - d];arr[j] = temp;}} } //希爾排序-sedgewick增量 void shellsedgewick_sort(int arr[], int n) {int i, j, d, si;int Sedgewick[] = { 929, 505, 209, 109, 41, 19, 5, 1, 0 };for (si = 0;Sedgewick[si] >= n;si++);for (;Sedgewick[si] > 0;si++) {d = Sedgewick[si];for (i = d;i < n;i++) {int temp = arr[i];for (j = i;j >= d && arr[j - d] > temp;j -= d)arr[j] = arr[j - d];arr[j] = temp;}} }?空間效率:O(1)
時(shí)間效率:依賴于增量序列的函數(shù)? ? ?當(dāng)n在一個(gè)特定范圍內(nèi)時(shí),復(fù)雜度為O(^1.3)? ? ? ? ? ? ? ? ? ? ? 最壞情況:O(N^2)
穩(wěn)定性(相同元素相對(duì)位置變化情況):不穩(wěn)定
適用性:順序存儲(chǔ)的線性表
轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/10415706.html
總結(jié)
以上是生活随笔為你收集整理的九大经典算法之插入排序、希尔排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 成都欢乐谷停车收费标准
- 下一篇: 九大经典算法之冒泡排序、快速排序