思想:每趟将max/min冒泡到最后一位
n个元素 :最多n-1趟
最多交换n-1-i次 (减的是上一轮已定序的位置 ;一趟定1个;第i趟已定i个)
分析:
趟:▲ ▲;i=1 0趟 ;i=1 i<=n-1
次:n个元素俩俩交换(全部参加)最多交换n-1次;第i趟,i-1位置已定
j=2 j<=n-1-(i-1)即n-i
j=0 j<n-1-i
#include <iostream>
using namespace std;
void BubbliSort(int a[],int length){
int temp;
//趟数,最多length-1趟
for(int i=0;i<length-1;i++){
//交换次数,最多交换length-1-i次(第一趟定1个,i趟定i个)
for(int j=0;j<length-1-i;j++){
//增序
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
int main(){
int a[] ={6,2,1,3,5,4};
BubbliSort(a,6);
for(int i=0;i<6;i++){
cout<<a[i];
}
}
优化
思想:如某趟排序没有发生交换,说明此时已整体有序;可提前结束
#include <iostream>
using namespace std;
void BubbliSort(int a[],int length){
int temp;
//趟数,最多length-1趟
for(int i=0;i<length-1;i++){
//交换次数,最多交换length-1-i次(第一趟定1个,i趟定i个)
for(int j=0;j<length-1-i;j++){
int flag=0;
//增序
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag =1;
}
if(flag==0)
break;
}
}
}
int main(){
int a[] ={6,2,1,3,5,4};
BubbliSort(a,6);
for(int i=0;i<6;i++){
cout<<a[i];
}
}


被折叠的 条评论
为什么被折叠?



