人生哪有最好,把每乙個當下做到最好,就很不錯了呀。以下以考試主要考查的重點內容為主體,講述過程以方便大家記憶為上,並不面面俱到。
首先得知道排序分內部排序和外部排序。
內部排序:排序整個過程中資料在記憶體中。
外部排序:排序整個過程中資料會有出現在內、外存之間調動的情況。
考研主要考內部排序。
內部排序主要分三大類(這裡是大的類別名不是排序演算法的名字):插入排序、交換排序、選擇排序(還有歸併和基數排序)
先講最普遍常用的:交換排序有兩種:氣泡排序+快速排序
冒泡:每次兩兩交換,小的在前大的在後,一趟一趟跑,直到全部有序。每次可以確定乙個元素的最終位置,時間複雜度: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 搜...