冒泡排序(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; } } }