一:
素數打表:
對10000以內素數打表:
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
;for(i=2;i<11000;i++)
}(可以根據需求自行擴大縮小陣列),時間複雜度大約為 n+ln(n)(記不太清了);
二:快速冪:
求 a的b次方:
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
printf("%d\n",n);
}原理可以把b轉換成二進位制研究一下,這裡只是為了整理模板,原理不細說。
假如結果要求對某個數求餘一定要對每一步每個數都求餘,千萬不要偷懶,不然萬一某一布值超出long long int 的儲存範圍導致結果不對都很難找錯誤。
三:快乘:
要求求 a×b。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
printf("%d\n",n);
} 原理與**都與快速冪相差不大,可以關聯記憶,但是一定要區分幾個小細節
n的初值以及每一步a,n的運算。
同樣,假如結果要求對某個數求餘一定要對每一步每個數都求餘,千萬不要偷懶,不然萬一某一布值超出long long int 的儲存範圍導致結果不對都很難找錯誤。 千萬要注意!!!!!
快排:1 :
對n個整數排序:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
bool cmp(int a,int b)
int main()
a[11000];
bool cmp(struct a a,struct a b)
int main()
對結構體排序必須寫全被調函式,被調函式中的if,else,是對結構體進行了二級排序,可根據題目需要更改,捨棄。
3 : 對字串排序(字典序)
#include
#include
#include
#include
#include
#include
#include
using namespace std;
bool cmp(char *a,char *b)
int main()
{int i,n;
char a[110][1100];
char *b[110];
scanf("%d",&n);
for(i=0;i按字串長度序
#include
#include
#include
#include
#include
#include
#include
using namespace std;
bool cmp(char *a,char *b)
{int n,m;
n=strlen(a);
m=strlen(b);
return nsort函式注意事項:
由於sort是c++中的函式,所以需要相應的標頭檔案以及std;
#include
using namespace std; 用之前一定要加。
bool型的被調函式只返回0或1。需要的標頭檔案#include。
對qsort有興趣的可以自己學一下,大同小異。自我感覺不如sort好用。
快速排序及acwing快排模板
快速排序是由c.a.r hoare在1960年發明的,謹以此篇向hoare大佬致敬!尋找標記 從一連串無序的元素中找到乙個標記x 交換 將小於等於x的元素都換到陣列左邊,將大於等於x的數都換到陣列右邊 分治 將此陣列分為兩個部分,使得左半邊的元素都不大於x,右半邊的數字都不小於x 遞迴 對左半邊陣列...
Java 快速排序,以及雙基快排
單基準快排 使用 quicksort arr,0,arr.length 1 排序整個陣列 private static void quicksort int arr,int left,int right return lt的左邊放小於基準值的值 gt的右邊放大於基準值的值 lt與gt其中乙個是基準值...
Java快速排序以及其優化(雙路快排 三路快排)
快速排序是屬於交換排序的基本思想。選擇乙個基準值val,把比val小的放在前面,比val大的放在後面,最後把val放在兩個區域中間,val就到了最終的位置。很明顯快排是乙個原地排序,也是乙個不穩定排序。空間複雜度 1.可以是為新陣列開闢額外空間o n 2.當然也可以在原陣列內交換得來o 1 時間複雜...