代码如下:
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 static void bubbleSort(vector<int> &v){ 5 int sz = v.size(); 6 bool flag = true; 7 int start = 1; 8 while(flag){ 9 flag = false; 10 for(int j=sz-1;j>=start;j--){ 11 if(v[j-1] > v[j]){ 12 swap(v[j-1], v[j]); 13 flag = true; 14 } 15 } 16 start++; 17 } 18 return; 19 } 20 21 int main(){ 22 int n; 23 while(cin>>n){ 24 vector<int> v(n); 25 for(int i=0;i<n;i++) 26 cin>>v[i]; 27 bubbleSort(v); 28 for(int num : v) 29 cout<<num<<","; 30 } 31 return 0; 32 }
每次循环确定一个元素最终位置,当循环中没发生交换时,说明数组已经有序,直接退出。start变量用来标记已经有序的部分数组尾部,去掉多余比较运算。
时间复杂度O(n²),是稳定的排序。初始序列逆序较少时,处理很快
浙公网安备 33010602011771号