資料結構 排序 內排序總結

2021-10-07 17:14:04 字數 3239 閱讀 5313

1.時間複雜度總結

n2:       直接插入排序,氣泡排序,簡單選擇排序(這三種裡面直接插入排序好一點)

nlogn:  快速排序,堆排序,歸併排序

n:          基數排序

其他:n2

2.時間效能與初始序列無關

口訣:「一堆烏龜選**」

堆排序,歸併排序,基本選擇排序,基數排序

3.空間效能:

快速排序:logn

歸併排序:n

基數排序:rd

其他:1

4.不穩定的有:

口訣:爾快選(你快選!!)希爾排序,快速排序,選擇排序

兩個選擇排序都是不穩定的(簡單選擇排序/堆排序)

5.基於比較的排序演算法最快只能是nlogn

6.全域性有序的演算法

一趟排序便可以確定乙個元素的最終位置的演算法交換排序(氣泡排序,快速排序),選擇排序(堆排序,簡單選擇排序)

**總結:

類別排序方法

最好時間

最壞時間

平均時間

空間複雜度

穩定性序列特徵

適用於插入排序

直接插入排序

n(順序)

n2(逆序)n21

穩定有序序列+待排序元素+無序序列

基本有序/n越小越好

折半插入排序

穩定有序序列+待排序元素+無序序列

希爾排序

與d相關

n2n1.3

1不穩定

縮小增量,組內直接插入排序

順序儲存

交換排序

氣泡排序

n(順序)

n2逆序n21

穩定無序序列+最大值/最小值+無序序列

快速排序

無序有序n2

逆序nlogn

平均:logn

最壞:n

不穩定較小無序序列+基準值+較大有序序列

非自然排序,越亂越好

分治選擇排序

簡單選擇排序

n2n2n21

不穩定有序序列+待排序元素+無序序列

堆排序nlogn

nlogn

nlogn

建堆:n

調整:logn

1不穩定

無序序列+最大值/最小值+無序序列

越多越好

歸併排序

/nlogn

nlogn

nlognn穩定

短有序序列+短有序序列+短…

分治基數排序

r+nd(r+n)

d(r+n)r穩定

分配+收集

關鍵字有較小的取值範圍

全部演算法實現:(單獨對各個演算法的分析和實現可以看筆者的其他部落格)

// wangdao_08_paixu.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include "pch.h"

#include #include#includeusing namespace std;

void insertsort(vectora)

} for (i = 1; i < a.size(); i++)cout << a[i] << " ";

}void binarysort(vectornum)

for (int j = i - 1; j >= high + 1; j--)num[j + 1] = num[j];

num[high + 1] = num[0];

} for (int i = 1; i < num.size(); i++)cout << num[i] << " ";

}void shellsort(vectornum)

} }for (int k = 1; k < num.size(); k++)cout << num[k] << " ";

}void bubblesort(vectornum)

} if (flag) break;

} for (int i = 1; i < num.size(); i++)cout << num[i] << " ";

}int partition(vector&a, int low, int high)

a[low] = pivot;

return low;

}void quicksort(vector&a, int low, int high)

}void selectsort(vectora)

} for (int i = 1; i < a.size(); i++)cout << a[i] << " ";

}void adjustheap(vector&a, int k, int n)

} a[k] = a[0];

}void bulidmaxheap(vector&a,int n)

void heapsort(vectora,int n )

for (int i = 1; i <= n; i++)cout << a[i] << " ";

}vectorb(20);

void merge(vector&a,int low, int mid, int high)

else

} while (i <= mid)

while (j<=high) }

void mergesort(vector&a, int low, int high)

}void collect(vector&a, vector> &tong) }}

void basicsort(vectora)

/*收集個位數*/

collect(a, tong);

/*分配十位數*/

for (int i = 0; i < a.size(); i++)

/*收集十位數*/

collect(a, tong);

/*輸出*/

資料結構常用內排序

以下排序均使用順序表作為排序資料的儲存結構 順序表基本運算演算法 seqlist.h include define maxl 100 最大長度 typedef int keytype 定義關鍵字型別為int typedef char infotype typedef struct rectype 查...

資料結構 排序 外部排序總結

1.影響內部排序時間效率的是移動和比較的次數,影響外部排序時間效率的是i o次數。2.歸併的躺數越少,讀寫磁碟的次數就越少,歸併的躺數 第一 k為歸併路數,增大k,可以降低躺數,減少io次數 第二 r為初始歸併段的個數,減少r,可以降低躺數,減少io次數 可是歸併路數一旦增大,內部比較的壓力就會變大...

資料結構排序 總結

一 排序的基本概念 假設含有n個記錄的序列為,其相應的關鍵字為,需確定1,2,3 n的一種排列p1,p2,pn使其相應的關鍵字滿足kp1 kp2 kp3 kpn非遞減 或非遞增 關係,及時的序列稱為乙個按關鍵字有序的序列,這樣的操作就稱為排序。二 排序的分類 1 內排序和外排序 按照排序過程中涉及的...