寫在最前面:
這裡的所有的排序方法都是我從挑戰程式設計競賽中學習的排序方法,也許c++裡面乙個sort()就可以搞定的事情,但是還是有必要鞏固一些基礎的知識吧,否則當去別家的公司面試連最簡單的排序都不會就尷尬了。這次的總結也權當是一次複習。
一.插入排序:
說明:從頭一開始依次遍歷整個陣列,當前的數字小於前面的數字時,往前查詢,直達查詢到小於等於它的數字;
**如下:
#include using namespace std;
//插入排序
//性質:
//①時間複雜度是o(n^2),排有序的陣列複雜度可以達o(n)
//②這是一種穩定的排序
const int maxn = 1e5+5;
int num[maxn];
int n;
void insert_sort()
num[j+1] = temp;
}return;
}void print()
insert_sort();
print();
return 0;
}
二.氣泡排序:
說明:這個是相鄰的兩個數的比較,如果後面的數字比前面的數字要小,則交換兩個數字
**如下:
#include using namespace std;
//氣泡排序
//性質:
//①時間複雜度是o(n^2)
int n;
const int maxn = 1e5+5;
int num[maxn];
int bubble_sort()}}
return sw;
}int main()
int tot = bubble_sort();
for (int i=0; i
三.選擇排序:
說明:從這個數列中找出未排列數列的最小數的下標,將相對的最小的數放在前面,i++,直到遍歷完整個陣列。
**:#include using namespace std;
int n;
const int maxn = 1e5+5;
int num[maxn];
void select_sort()
select_sort();
for (int i=0; i
四.穩定排序:
說明:這應該屬於一種思想概念吧:
例子:1z 5e 2s 7g 2m
我們按照數字的大小進行公升序排序。如果排序後2m在2s前面,則這種排序是不穩定的排序。
如果相同的值並且排序之後他們原來的相對位置沒有改變,則這種排序是穩定排序。
上面的三種排序中:氣泡排序(注意這裡的篩選條件是<,若是<=則排序是不穩定的排序)和插入排序都是穩定排序,選擇排序是不穩定的排序。
總結:上面的排序都是初等的排序方法,這些排序的效率比較的低下,都是o(n^2)的複雜度,當然還有初級的排序方法:桶序法,它的時間複雜度是o(n),但是它有相當大的空間複雜度,相當於是空間換時間。
implement:希爾排序
說明:shell sort結合了插入排序的優點,通過數學的方法經過打表打出一張排序的間隔表,之後排序,時間複雜度約為o(n^(1.25));沒有具體的數學證明,詳情見p55.
**:#include using namespace std;
const int maxn = 1e5+5;
int n;
int num[maxn];
vectorg;
void insert_sort(int interval)
num[j+interval] = temp;
}return;
}//生成一張要排序的間隔的表
void shell_sort()
for (int i = g.size()-1; i>=0; i--)
return ;
}int main()
{ srand((unsigned)time(null));//為了產生隨機數而生成的隨機種子
cin>>n;
for (int i=0; i
真的是總結啊:
上面的排序方法是簡單的排序,希望自己還有時間整理下二分排序,歸併排序等高階的排序方法吧。
也希望自己能好好的刷題,迎接下面的training~~:-d
初等排序1
目錄 初等排序1 一.三種初等排序演算法 1.插入排序法 2.氣泡排序法 3.選擇排序法 二.穩定排序 三.總結1 插入排序法 從左到右對資料進行排序,將待排序的資料插入前面已經排序的資料的合適位置,直到插入最後乙個資料。插入排序法的演算法如下 for i 1 i 0 a j x a j 1 x 在...
資料結構與演算法 3 初等排序演算法
首先我們為每一種排序類建立less 和exchange 這兩個輔助函式用於物件的比較和位置的交換。為了讓我們的排序類支援不同型別的物件,我們使用了comparble介面。private static boolean less comparable v,comparable w private sta...
排序演算法集合
氣泡排序 public static int maopao int param return param 快速排序 public static int quick int param,int left,int right return param 分割陣列,相當於分治演算法,快速排序的核心 priv...