#include <iostream>
#include <vector>
//#include <algorithm>
#include<time.h>
using namespace std;
void BubbleSort(vector<int>&A, int n)
{
//标志位,用于记录每次排序是否有元素位置交换
//不设置标志位,可能在排好序后程序还要继续循环下去直至循环条件不满足才退出,浪费时间
bool swapped;
//do...while()版,
do{
swapped=false;
for(int i = 0;i < n-1;i++){
if(A[i] > A[i+1]){
swap(A[i],A[i+1]);
swapped = true;
}
}
--n; //每趟排序后都让n自减,即待排元素慢慢减少
}while(swapped);
for(int k=0; k<A.size(); k++)
{
cout << A[k] << " ";
}
}
//for循环版
void BubbleSort1(vector<int>&A,int n){
bool swapped;
//此处for():待排序次数;
for(int i=0;i<n-1;i++){
swapped = false;
//此处for待排(待比较)元素个数;
for(int j=0;j<n-i-1;j++){
if(A[j]>A[j+1]){
swap(A[j],A[j+1]);//直接用C++提供的swap,手动写个交换变量的函数也行
swapped=true;//每次排序后将标志更新为true,表示进行过元素交换,继续排序
}
}
if(swapped==false){break;}//没有元素进行交换,说明元素整体有序,结束循环
//if(!swapped){break;}
}
for(int k=0; k<A.size(); k++)
{
cout << A[k] << " ";
}
}
int main()
{
clock_t start,end;
//int A[10] = { 11,16,24,87,45,6,93,66,74,38 };还是用vector更C++一些
//测试,以及两种方式的运行时间
vector<int> A;
A.push_back(11);
A.push_back(16);
A.push_back(24);
A.push_back(87);
A.push_back(45);
A.push_back(6);
A.push_back(93);
A.push_back(66);
A.push_back(74);
A.push_back(38);
start=clock();
BubbleSort(A, 10);
end = clock();
cout<<"do...while()冒泡的运行时间"<<(double)(end-start)/CLOCKS_PER_SEC<<endl;
start=clock();
BubbleSort1(A, 10);
end = clock();
cout<<"for()冒泡的运行时间"<<(double)(end-start)/CLOCKS_PER_SEC<<endl;
return 0;
}
C++冒泡排序
最新推荐文章于 2023-09-04 11:33:22 发布