排序和查詢一直是演算法的主流問題。
排序方法有很多種:
1.簡單排序(o(n^2))
#include #include using namespace std;
void ******sort(int *a,int n)
} }}int main()
******sort(a,min(n,20));
for (int i = 0; i < n && i < 20; ++i)
cout << endl;
}
簡單排序是實現就上面這些。(看起來很上的那一堆,主要是用了方便檢驗)至於呼叫了min,所以才會有那個include 那個algorithm,對了,稍微懂點的,或者還沒有忘掉的哥們,應該還是很清楚這個庫裡面就包含了sort函式,這個就是用快排實現的。
2.氣泡排序 o(n^ 2)運氣好可以是o(n)
#include #include using namespace std;
void bubblesort(int *a,int n)
} }}int main()
bubblesort(a,min(n,20));
for (int i = 0; i < n && i < 20; ++i)
cout << endl;
}
也不難理解,就是將每乙個大小順序的點排到乙個排的地方去,第一次是排最大的那個。依次類推。
由於前兩個比較可以使得在a[1]放的是a[0] a[1]中比較大的那個。
再來就是就是a[2]放的是a[1] a[2]中比較大的那個。由於a[1]又是a[0] a[1]中最大的那個,也就確保了a[2]是前三個中最大的那個。依次類推,排完所有點。
3.歸併排序(mergesort)
#include #define size 100
//設定最大長度
using namespace std;
void mergesort(int *a ,int s,int e) else
} while (i <= mid)
while (j <= e)
for (int i = 0; i < tot; ++i)
}int main()
mergesort(a,0,n - 1);
for (int i = 0; i < n && i < 20; ++i)
cout << endl;
}
4.選擇排序
把最小的放最前面,或者是反過來也是可以的。
#include using namespace std;
void selectsort(int *a,int n)
if (min != i) }}
int main()
selectsort(a,n);
for (int i = 0; i < n && i < 20; ++i)
cout << endl;
}
5.快速排序
#include using namespace std;
void sort (int *a,int s,int e)
while ( i < j && a[i] <= k)
++i;
if ( i < j )
} a[i] = k;
sort(a,s,i-1);
sort(a,i+1,e);
}int main()
sort(a,0,n-1);
for (int i = 0; i < n; ++i)
cout << endl;
}
6.插入排序
//非降序
void insertionsort(int* s, int n)
}
總體來說,我還是比較喜歡快排的。這是用遞迴實現的,如果能轉成用棧去模擬棧的話,應該會降低時間複雜度。
快速排序 C語言描述
time limit 15ms memory limit 65536kb submit statistic discuss problem description 山東理工大學有很多學生,當然也有很多美女,機械實驗班的學委 外號 大王八 很想找個女朋友,但他想找個身高和自己相配的女生做女朋友,現有理...
希爾排序 C語言描述
下面用個例子來說明一下 演算法編寫 for j 0 add j 0 j 依次增量排序 p k a temp 可以看出來,希爾排序是將陣列序列分成若干個子串行,然後再將子串行進行插入排序,等到序列基本有序時,最後進行一次全體插入排序。不穩定排序 可以從上面的那個例子看出,有兩個相同的數 48,但在最終...
常見幾種排序演算法的C 描述
注意如果採取的是三數中值分割法的時候需要,將頭,中,尾的三個值中間的轉移到陣列的頭部。這樣來進行partition void quicksort vector arr,int start,int end void bubblesort vector arr void shellsort vector...