冒泡排序(bubble sort)是最基本的排序方法,总结一下,对于有n个元素的数组,有两种方式:从左向右或从右向左冒泡:
一、从前往后
每次趟锁定该趟末尾的元素,重点2/2/2,i<n-1,j<n-1-i
。
1、从小到大排序。
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
void coutarray(int a[])
{
for(int i=0;i<20;i++)
cout<<a[i]<<(i%5==4?'\n':'\t');
}
void bubble1(int a[],int n)
{
bool flag=true;
int temp;
for(int i=0;i<n-1&&flag;i++)
{
flag=false;
for(int j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{
temp=a[j],a[j]=a[j+1],a[j+1]=temp;
flag=true;
}
}
}
void main()
{
int a[20]={0};
int n=10;
srand(time(0));
for(int i=0;i<n;i++)
cout<<(a[i]=rand()%101)<<(i%5==4?'\n':'\t');
bubble1(a,20);
cout<<"从前往后冒大泡到数组尾(从小到大):\n";
coutarray(a);
}
2、从大到小排序。
void bubble2(int a[],int n)
{
bool flag=true;
int temp;
for(int i=0;i<n-1&&flag;i++)
{
flag=false;
for(int j=0;j<n-1-i;j++)
if(a[j]<a[j+1])
{
temp=a[j],a[j]=a[j+1],a[j+1]=temp;
flag=true;
}
}
}
二、从后往前
每次趟锁定该趟最前端元素,重点i=n-1,j>n-1-i
。
1、从小到大排序。
void bubble3(int a[],int n)
{
bool flag=true;
int temp;
for(int i=n-1;i>0&&flag;i--)
{
flag=false;
for(int j=n-1;j>n-1-i;j--)
if(a[j]>a[j-1])
{
temp=a[j],a[j]=a[j-1],a[j-1]=temp;
flag=true;
}
}
}
2、从小到大排序。
void bubble4(int a[],int n)
{
bool flag=true;
int temp;
for(int i=n-1;i>0&&flag;i--)
{
flag=false;
for(int j=n-1;j>n-1-i;j--)
if(a[j]<a[j-1])
{
temp=a[j],a[j]=a[j-1],a[j-1]=temp;
flag=true;
}
}
}