資源簡介
冒泡排序、雞尾酒排序/快速排序/SOrt函數排序/插入排序/折半插入排序/二路插入排序/希爾排序/選擇排序/地精排序/STL堆排序/桶排序/
代碼片段和文件信息
#include
using?namespace?std;
// 傳參數太費事了。。用的全局變量?
const?int?maxn=500005;
int?n_search;
int?cnt1cnt2;//比較,交換計數器?
double?tcnt;//時間,單位秒?
int?a[maxn]b[maxn];//a是原數組,b是給每一個算法排序用的副本?
//全打印數組,用于捉蟲?
void?debug(int?*a){
printf(“***********************************************\n“);
for(int?i=1;i<=n;i++){
printf(“?%10d“a[i]);
if(i%10==0)
putchar(‘\n‘);
}
printf(“***********************************************\n“);
}
//初始化函數,清零三個計數器,拷貝a的新副本?
void?init(){
for(int?i=1;i<=n;i++)
b[i]=a[i];
cnt1=cnt2=tcnt=0;
}
//打印
void?prin(){
printf(“排序本組%d個數據進行了%d次比較,%d次移動,花費時間%.2lf毫秒\n\n“ncnt1cnt2tcnt*1000);
}
//無法統計cnt1cnt2的打印?
void?prins(){
printf(“排序本組%d個數據花費時間%.2lf毫秒\n\n“ntcnt*1000);
}
//冒泡排序
double?maopao(){
clock_t?se;
printf(“冒泡排序:\n“);
s=clock();
for(int?i=1;i for(int?j=1;j<=n-1-i;j++){
cnt1++;
if(b[j]>b[j+1]){
swap(b[j]b[j+1]);
cnt2++;
}
}
e=clock();
return?((double)(e-s))/CLK_TCK;
}
//改進冒泡?
double?maopaogai(){
clock_t?se;
printf(“改進冒泡排序:\n“);
int?flag=n;
s=clock();
for(int?i=1;i<=flag;i++){
int?k=flag;
flag=0;
for(int?j=1;j cnt1++;
if(b[j]>b[j+1]){
flag=j;
swap(b[j]b[j+1]);
cnt2++;
}
}
}
e=clock();
return?((double)(e-s))/CLK_TCK;
}
//雞尾酒?
double?jiweijiu(){
clock_t?se;
printf(“雞尾酒排序:\n“);
s=clock();
int?bot=1bou=1top=n;
bool?sw=1;
while(sw){
sw=0;
for(int?i=bot;i cnt1++;
if(b[i]>b[i+1]){
cnt2++;
swap(b[i]b[i+1]);
sw=1;
bou=i;
}
}
top=bou;
for(int?i=top;i>bot;i--){
cnt1++;
if(b[i] cnt2++;
swap(b[i]b[i-1]);
sw=1;
bou=i;
}
}
bot=bou;
}
e=clock();
return?((double)(e-s))/CLK_TCK;
}
//手寫快排?
void?quicksort(int?beginint?end){
if(begin>=end)
return?;
int?t=b[begin];
int?i=beginj=end;
while(i while(it){
cnt1++;
j--;
}
cnt1++;
b[i]=b[j];
cnt2++;
while(i i++;
cnt1++;
}
cnt1++;
b[j]=b[i];
cnt2++;
}
b[i]=t;
cnt2++;
quicksort(begini-1);
quicksort(i+1end);
}
double?kuaipai(){
clock_t?se;
printf(“快速排序:\n“);
s=clock();
quicksort(1n);
e=clock();
return?((double)(e-s))/CLK_TCK;
}
//algorithm庫sort
double?_sort(){
clock_t?se;
printf(“Sort函數:\n“);
s=clock();
sort(b+1b+n+1);
e=clock();
return?((double)(e-s))/CLK_TCK;
}
//樸素插入
double?charu(){
clock_t?se;
printf(“插入排序:\n“);
s=clock();
for(int?i=1;i int?j;
int?t=b[i+1];?
for(j=i;cnt1++j>=1&&t b[j+1]=b[j];
cnt2++;
}
b[j+1]=t;
cnt2++;
}
e=clock();
return?((double)(e-s))/CLK_TCK;
}
//折半插入?
double?zheban(){
clock_t?se;
printf(“折半插入排序:\n
- 上一篇:VC++ 串口
- 下一篇:農業生態氣象自動化觀測系統使用說明書
評論
共有 條評論