交换排序
1、冒泡排序
算法思想
从后往前(或从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到序列比较完。
算法实现
//交换
void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
//冒泡排序
void BubbleSort(int A[], int n){
for(int i=0;i<n-1;i++){
bool flag = false;
for(int j=n-1;j>i;j--){
if(A[j-1]>A[j]){
swap(A[j-1], A[j]);
flag = true;
}
if(flag==false)
return; //本趟没交换,则排序完成
}
}
}
总结
空间复杂度:O(1)
时间复杂度:
- 最好情况:
有序:比较次数=n-1;交换次数=0;
最好时间复杂度=O(n) - 最坏情况:
逆序:比较次数=n(n-1)/2=交换次数
最坏时间复杂度=O(n²) - 平均复杂度=O(n²)