冒泡排序是最基本的排序方式,但是最初的冒泡排序有一点不足,他只是死板的每一次都比较,不管是否已经排序完成。但是,如果加入一位change位来判断是否已经排序完成(若change为0则说明没有两两位置交换的数据,则说明已经排序完成),则可以节约大约15%的运算时间。
下面是改进前的冒泡排序和改进后的对比代码。
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
void swap(int* a,int* b) //交换函数
{
int m;
m = *a;
*a = *b;
*b = m;
}
void main()
{
int i;
int a[10000],b[10000];
int len = 10000;
double start, finish,time1;
int change=1;
srand((unsigned)time(NULL));
for (i = 0; i <len; i++)
{
a[i] = 1+rand()%9999;//生成随机数
b[i] = a[i];
}
start = clock();
for ( i = 0; i < len-1; i++)//传统的冒泡排序
{
for (int j = 0; j < len - i - 1; j++)
{
if (a[j] < a[j + 1])
swap(a[j], a[j + 1]);
}
}
finish = clock();
time1 = finish - start;
cout << "传统的冒泡排序所用时间为:" << time1 << endl;
start = clock();
for (i = 0; i < len - 1 && change != 0; i++)//改进后的冒泡排序
{
change = 0;
for (int j = 0; j < len - 1 - i; j++)
if (b[j] < b[j + 1])
{
swap(b[j], b[j + 1]);
change = 1;
}
}
finish = clock();
time1 = finish - start;
cout << "改进后的冒泡排序所用时间为:" << time1 << endl << endl;
}