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)。
浙公网安备 33010602011771号