代码如下:

 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²),是稳定的排序。初始序列逆序较少时,处理很快

 

posted on 2020-09-09 15:53  高数考了59  阅读(148)  评论(0)    收藏  举报