要注意的是,上面的
意味着每次都要从头遍历。
C++实现:均实现了从小到大的排序。
外层循环表示次数。内层表示每次移动的数据的流向。分为先找最小的放在最左边,和先找最大的放在最右边两种思路,本质一样。
#include <iostream>
using namespace std;
int bubblesort1(int *arr,int length)
{
int temp;
for(int i =0;i<length;i++)
{
for(int j=length-1;j>=i+1;j--)//此处判断条件也可写成j>=0,前面有一部分是排好序的,所以这里可以这么写。
{
if(arr[j]<arr[j-1])
{
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
return 0;
}
int bubblesort2(int *arr,int length)
{
int temp;
for(int i =0;i<length-1;i++)
{
for(int j=0;j<length-i-1;j++)//此处判断条件也可写成j<length-1,这里这样写是因为后面有一部分是排好序的,没必要遍历那那么后面
{
if(arr[j]>arr[j+1])
{
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return 0;
}
int main(){
int a[5]={4,5,8,1,2};
int length = sizeof(a)/ sizeof(a[0]);
int b[6]={4,5,8,1,2,3};
int length2 = sizeof(b)/ sizeof(b[0]);
bubblesort1(a,length);
bubblesort2(b,length2);
cout<<"bubblesort1 result:";
for(int k=0;k<length;k++){
cout<<a[k]<<"\t";
}
cout<<endl;
cout<<"bubblesort2 result:";
for(int k=0;k<length2;k++){
cout<<b[k]<<"\t";
}
cout<<endl;
return 0;
}
上面截图来自:
冒泡排序(C++)算法详解