考研資料結構 排序

2021-10-03 18:18:10 字數 1445 閱讀 5078

人生哪有最好,把每乙個當下做到最好,就很不錯了呀。

以下以考試主要考查的重點內容為主體,講述過程以方便大家記憶為上,並不面面俱到。

首先得知道排序分內部排序和外部排序。

內部排序:排序整個過程中資料在記憶體中。

外部排序:排序整個過程中資料會有出現在內、外存之間調動的情況。

考研主要考內部排序。

內部排序主要分三大類(這裡是大的類別名不是排序演算法的名字):插入排序、交換排序、選擇排序(還有歸併和基數排序)

先講最普遍常用的:交換排序有兩種:氣泡排序+快速排序

冒泡:每次兩兩交換,小的在前大的在後,一趟一趟跑,直到全部有序。每次可以確定乙個元素的最終位置,時間複雜度:o(n^2)  氣泡排序是穩定的排序。快速排序,傳入的引數有三個,乙個陣列,兩個位置。每次可以確定乙個元素的最終位置,時間複雜度o(n^2),由於快排中應用了遞迴,需要乙個棧,所以空間複雜度是o(log2n),快排不穩定

void bubblesort(elemtype a,int n)

if(flag==false) return; //如果本趟排序沒發生交換,說明已經有序,該退出了

}//不懂的先敲三遍再看注釋,加油~

2   快速排序,傳入的引數有三個,乙個陣列,兩個位置。每次可以確定乙個元素的最終位置,時間複雜度o(n^2),由於快排中應用了遞迴,需要乙個棧,所以空間複雜度是o(log2n),快排不穩定 

/*以下快排出自嚴蔚敏資料結構書中講解*/

void quicksort(int a,int low ,int high)

int partition(int a,int low ,int high)

a[low]=pivot;

return low;

}

選擇排序包括:簡單選擇排序和堆排序

3   簡單選擇排序:每次先出乙個最小的加到前邊來,直到排完。時間複雜度o(n^2)空間o(1);是不穩定的排序。

void selectsort(int a,int len)

}void buildheapmax(int a,int len)

void adjustdown(int a.int k,int len)

}a[k]=a[0];

}

插入排序包括直接插入,折半插入,希爾排序,這裡不講希爾,因為考的太少

5 直接插入,每次直接看下乙個該放在前面哪個位置,時間複雜度o(n^2)是穩定的排序

void insertsort(int a,in len)

}}

6  折半插入 時間複雜度o(n^2),穩定

void insertsort(int a,int len)

}

資料結構 考研 快速排序

快速排序有三種寫法,平均複雜度幾乎相同。我們這裡給出最常見的那種,把第乙個元素拎出來,然後找到它該去的地方再塞進去。快速排序和氣泡排序都屬於交換排序,都屬於不穩定排序。一趟快速排序定乙個位置,並且把區間分為兩部分。int partition int arr,int i,int j 小於基準值左移 正...

考研 資料結構 排序演算法

include include using namespace std 排序演算法 時間複雜度 最好,最壞,平均 插入排序 void insert sort int arr,int n arr j 1 temp 折半插入排序 void insert02 sort int arr,int n else...

資料結構 考研 拓撲排序

獲得乙個圖的拓撲排序可以有深搜和廣搜兩種途徑。深搜是逆向思維,遍歷到遞迴最深處,層層返回的時候把結點壓棧,得到的是乙個逆序拓撲序列。廣搜是正向思維,從度為 0 的結點入手,每次將度為 0 的結點入隊,直到全部遍歷。深搜 int visited 5 visited有三種狀態,未搜尋 0 搜尋中 1 搜...