ALDS1_2_A 冒泡排序

#include<iostream>
#include<vector>
using namespace std;

int bubbleSort(vector<int>& A, int N){
  int sw=0;
 // core code of bubbleSort
  for(int i = 0 ; i < N - 1 ; i++){// After the last smallest N - 1 elements are in their right place, the numbers are sorted!
      for (int j = N - 1 ; j >= i + 1; j --){//start from the last element!
          if (A[j] < A[j-1]){
              swap(A[j], A[j-1]);
              sw++;
          }
      }
  }
 // core code of bubbleSort!
  for(int k = 0; k < N; k++){
   if (k == (N-1)) cout<<A[k]<<endl;
   else cout<<A[k]<<" ";
  }
  return sw;
}

int main(){
 int N;
 vector<int> A(100);
 cin>>N;
 for(int i =0; i <N; i++) cin>>A[i];

 int sw = bubbleSort(A,N);
 cout<<sw<<endl;
}

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_A

冒泡排序也是分为未排序部分和排序部分,刚开始排序部分为0个,当排序部分为N-1个的时候,即最小的N-1个数已经浮上来,故已经有序,所以外循环为N-1次。每次外循环结束,排序部分的元素增加1。且每次内循环从最后一个元素起,检查并上浮元素。算法复杂度O(n^2)。

posted on 2018-03-08 15:47  vyouman  阅读(137)  评论(0)    收藏  举报