冒泡排序详细讲解
2012-04-20 22:56 javaspring 阅读(377) 评论(0) 编辑 收藏 举报冒泡排序是一种比较简单而且效率比较高的算法,冒泡排序最好的情况下的时间复杂度为O(n),也就是数据已经排好了,在最坏情况下,时间复杂度为O(n*n),也就是数据全都按关键字逆序排列。
冒泡排序有两重循环,外层循环决定循环的次数,如果有n个数需要排序的话,那就要循环n-1次,这是因为n个数据只需要将最大的n-1个数排到最后就行了,里面的循环是进行比较,前面的数与后面的数进行比较,如果前面的数大于后面的数,就进行交换,外面的循环每进行一次,里面的循环就少进行一次。最初,里面的循环进行n-1次。
代码如下
#include <iostream.h> void main() { int a[10]; for(int i=0;i<10;i++) { cout<<"请输入第"<<i+1<<"个数"<<endl; cin>>a[i]; } cout<<"你输入的数是:"<<endl; for(int ii=0;ii<10;ii++) { cout<<a[ii]<<ends; } cout<<endl; cout<<"排序之后是"<<endl; for(int ix=0;ix<9;ix++) { bool isrigth=true; for(int j=0;j<10-ix-1;j++ ) { if(a[j]>a[j+1]) { isrigth=false; int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } if(isrigth) break; } cout<<"排好之后是:"<<endl; for(int iii=0;iii<10;iii++) { cout<<a[iii]<<ends; } cout<<endl; }在内层循环里加上一个布尔类型的变量,如果这次循环没有排好序的话就将isright设置为false,表示没有排好序,如果排好序了,isright的值就没有改变,在本次外层循环里判断出,就跳出循环。
就是因为家了一个变量进行判断,才使得在最好情况下的时间复杂度为O(n).