1.从第一个元素开始两两比较
两两比较,索引为 i 的与 i+1 的比较
比较的结果分为两种:位置不合适,需要空杯理论交换元素;位置合适,抓取下一个元素。
2.空杯理论
3.每次遍历,执行交换的结果是“最值”排在末尾
4.多次遍历,多个“最值”排在末尾
如果n个元素中,n-1个元素已经有序,则n个元素都有序。
所以这边的“多次”指的是 length-1 次
1.比较
a[i]>a[i+1]
2.空杯交换
if(a[i]>a[i+1]){
int temp=a[i+1];
a[i+1]=a[i];
a[i]=temp;
}
3.最值
for(int i=0;i<length-1;i++){
if(a[i]>a[i+1]){
int temp=a[i+1];
a[i+1]=a[i];
a[i]=temp;
}
}
4.length-1 个“最值”排序
for(int j=0;j<length;j++){
for(int i=0;i<length-1;i++){
if(a[i]>a[i+1]){
int temp=a[i+1];
a[i+1]=a[i];
a[i]=temp;
}
}
}
完整代码:
C++
未优化
#include <iostream>
using namespace std;
void print(int a[],int length){
for(int i=0;i<length;i++){
cout << a[i] << " " << endl;
}
}
//非递减冒泡排序
void bubble(int a[],int length){
for(int j=0;j<length;j++){
for(int i=0;i<length-1;i++){
if(a[i]>a[i+1]){
int temp=a[i+1];
a[i+1]=a[i];
a[i]=temp;
}
}
}
}
int main(){
int a[]={7,5,4,2};
int length=sizeof(a)/sizeof(a[0]);
bubble(a,length);
print(a,length);
return 0;
}
Python
# -*- coding: utf-8 -*-
"""
冒泡排序算法
输入
排序
输出
"""
class BubbleSort:
def __init__(self):
li=[5,4,3,2,1]
# 索引迭代
# 未经优化
for j in range(len(li)):
for i in range(len(li)-1):
if li[i]>li[i + 1]:
temp=li[i+1]
li[i+1]=li[i]
li[i]=temp
self.pr(li)
pass
# 输出
def pr(self,list):
# 对象迭代
# for ele in list:
# print(ele,end="\n")
#索引迭代
for i in range(len(list)):
print(list[i])
BubbleSort = BubbleSort()