Q:测试优化后冒泡排序的效率
结论:冒泡的优化基本上没有意义,优化后的效率有时候可能比不优化还要低,这是因为优化后的冒泡排序每次都要多执行好多语句
代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#define NUM 100000
void BubbleSort1(int *arr,int len)
{
int tmp;
for(int i=0;i<len-1;i++)
{
for(int j=0;j+1<len-i;j++)
{
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
void BubbleSort(int *arr,int len)
{
int tmp;
bool flg;
for(int i=0;i<len-1;i++)
{
flg = false;
for(int j=0;j+1<len-i;j++)
{
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flg = true;
}
}
if(!flg)
{
return;
}
}
}
int main()
{
int *arr = (int *)malloc(NUM*sizeof(int));
int *brr = (int *)malloc(NUM*sizeof(int));
assert(arr != NULL && brr != NULL);
srand(time(NULL));
for(int i = 0;i<10;i++)
{
for(int j = 0;j<NUM;j++)
{
brr[j] = arr[j] = rand()*rand();
}
printf("第%d次优化前:",i+1);
clock_t c1 = clock();
BubbleSort1(arr,NUM);
clock_t c2 = clock();
printf("%d",c2-c1);
printf("第%d次优化后:",i+1);
c1 = clock();
BubbleSort(brr,NUM);
c2 = clock();
printf("%d",c2-c1);
printf("\n");
}
return 0;
}
知识点:
1.rand()和srand()函数包含在stdlib.h头文件中
2.clock()函数包含在time.h头文件中