//冒泡排序 O(n2) 80000-36.03s
//排n个数,一共进行n-1次排序,第一次排完序最大的数在最末尾(n-1),第二次排完序最大数在倒数第二个(n-2)…………
//优化,加flag,如果某一次排序没有位置的交换,直接退出
void BubbleSort(int arr[],int length)
{
int temp = 0;
bool flag = false;
for (int i = 0; i < length-1; i++)
{
for (int j = 0; j < length - i-1; j++)
{
if (arr[j] > arr[j+1])
{
temp = arr[j];
arr[j]=arr[j+1];
arr[j + 1] = temp;
flag = true;
}
}
cout << endl;
cout << "第" << i << "次排序:" << endl;
for (int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
if (flag == false)
{
break;
}
else
{
flag = false;
}
}
cout << endl;
cout << "最终排序为:" << endl;
for (int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
}
int main()
{
int *arr = new int[80000]; //80000个数据36.03s
int length = 80000;
srand((unsigned int)time(NULL));
default_random_engine e;
uniform_real_distribution<double>u(0, 1);
for (size_t i = 0; i < 80000; i++)
{
arr[i] = u(e)*8000000;
}
//int arr[] = { 10,3,5,7,8,2,4,1,0 };
//int arr[] = { 1,2,3,4,5,6,7,8,9 };
start = clock();
BubbleSort(arr, length);
stop = clock();
duration = ((double)(stop - start)) / CLK_TCK;
cout << duration << endl;
system("pause");
return 0;
}