冒泡排序
- 基本思想:重复地走访要排序的元素列,依次比较相邻的两个元素,如果顺序错误就交换它们,直到没有元素需要交换。
- 时间复杂度:最坏和平均情况都是O(n²)。
- 空间复杂度:O(1),属于原地排序。
- 稳定性:稳定。
求第k趟冒泡排序的结果
void solve(){
int n,k;
cin>>n>>k;
vector<int> v(n);
for(int i=0;i<n;i++){
cin>>v[i];}
if(k>n-1){//n个元素最多需要n-1趟排序
sort(v.begin(),v.end());
for(int i=0;i<n;i++){
cout<<v[i]<<" ";
}}
for(int i=0;i<n-1;i++){//n个元素最多需要n-1趟排序 即0至n-2
for(int j=0;j<n-1-i;j++){//-i是因为已经有i个元素在最终位置 不需要再加入比较
if(v[j]>v[j+1]){
swap(v[j],v[j+1]);}
}
if(i+1==k){
for(int i=0;i<n;i++){
cout<<v[i]<<" ";
}}
}
}
输入:
6 1
64 34 25 12 22 90
输出
34 25 12 22 64 90
输入:
6 2
64 34 25 12 22 90
输出
25 12 22 34 64 90
输入:
6 8
64 34 25 12 22 90
输出
12 22 25 34 64 90