# Greedy# Sorting# Bubble Sort

a539 - 10327 - Flip Sort

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算將給定的整數序列使用相鄰元素交換(類似 Bubble Sort)排序所需的最小交換次數。

解題思路

此題採用貪心策略。每次遍歷數組,如果發現相鄰元素順序錯誤,則立即交換。重複此過程,直到數組完全排序。由於每次交換只考慮相鄰元素,因此可以保證在每次迭代中,最大的元素會“冒泡”到其正確的位置。持續進行此操作,直到整個數組排序完成。

複雜度分析

  • 時間複雜度: O(n^2)
  • 空間複雜度: O(n)

程式碼

#include <iostream>
using namespace std;
int main(){
	int b;
	while(cin>>b){
		int c = 0,a[b]={};
		for(int h=0;h<b;h++)
			cin>>a[h];
		for(int i=0;i<b;i++){
				bool flag = 0;
			for(int j=0;j<b-1;j++){
				if(a[j]>a[j+1]){
					swap(a[j],a[j+1]);
					c++;
				}
			}
		for(int o = 1;o<b;o++)
			if(a[o]<a[o-1])
				flag = 1;
		if(flag==0)
			break;
		}
		
		cout<<"Minimum exchange operations : "<< c <<'\n';
	}
}

Discussion