概述
排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序。而外部排序是因排序的資料非常大,一次不能容納所有的排序記錄,在排序過程中須要訪問外存。
我們這裡說說八大排序就是內部排序。
當n較大,則應採用時間複雜度為o(nlog2n)的排序方法:高速排序、堆排序或歸併排序序。
高速排序:是眼下基於比較的內部排序中被覺得是最好的方法,當待排序的keyword是隨機分布時。高速排序的平均時間最短;
氣泡排序是一種交換排序,基本思想是:兩兩比較相鄰記錄的keyword,假設反序則交換,直到沒有反序的記錄為止
**演示樣例:
#include using namespace std;
void bubblesort(int array,int length)
} }}int main();
bubblesort(array,8);
for(int i=0;i<8;i++)
if(min!=i) }}
int main();
******selectsort(array,8);
for(int i=0;i<8;i++) 第一次選的時候變成 , 兩個2的次序就變了,所以不穩定。
簡單選擇排序效能上要優於氣泡排序
基本思想:將乙個記錄插入到乙個已經排好序的有序表中,得到乙個新的、記錄數加1的有序表
演示樣例**:
#include using namespace std;
void directinsertsort(int array,int length){
//排序次數比陣列長度小1
for(int i=1;i=0&&temp時間複雜度分析:最好時間複雜度o(n)、最壞和平均時間複雜度均為o(n^2)
空間複雜度分析:o(1)
穩定性分析:穩定的排序演算法
相同的時間複雜度條件下,直接插入排序比氣泡排序和簡單選擇排序效能要好一些
希爾排序又稱「縮小增量排序」,也是一種插入型別的排序方法。
直接插入排序,當待排序列基本有序,直接插入排序的效率就能夠大大提高。當n值非常小時。效率也比較高。希爾排序正是從這兩點分析出發對直接插入排序改進得到的一種插入排序方法。
基本思想:先將整個待排記錄序列切割成為若干個子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
演示樣例**:參考資料結構第272頁
時間複雜度分析:平均時間複雜度為o(nlogn)~o(n^2)。最好時間複雜度為o(n^1.3),最壞時間複雜度為o(n^2)
空間複雜度分析:o(1)
穩定性分析:因為keyword交換移動是跳躍式的,所以是不穩定的排序演算法。
各種排序的穩定性,時間複雜度和空間複雜度總結:
注:高速排序的空間複雜度,最好是o(logn),最壞是o(n)。
內排序演算法
每次需要排序的時候總是會忘記基本的排序演算法,為了防止自己再次忘記,寫個部落格加深自己的印象 簡單選擇排序大概就是最簡單我們最容易想到的一種排序方法,一共進行n 1次選擇,在第i次選擇中選擇第i小的數放在相應的位置。我們可以想象一種場景,有一些賬單需要我們按照時間進行排序,我媽每次選擇最早的一張拿在...
內排序和外排序
內排序 指在排序期間資料物件全部存放在記憶體的排序。外排序 指在排序期間全部物件太多,不能同時存放在記憶體中,必須根據排序過程的要求,不斷在內,外存間移動的排序。根據排序元素所在位置的不同,排序分 內排序和外排序。內排序 在排序過程中,所有元素調到記憶體中進行的排序,稱為內排序。內排序是排序的基礎。...
內排序之快速排序
快速排序在資料較多的情況下幾乎是最好的演算法 它的時間複雜度為o n logn templatebool prior e a,e b 判斷兩個數的大小 templateinline void swap e a,int i,int j 交換兩個位置上的資料 templateinline int par...