今天学习的排序算法是冒泡排序,这个冒泡的问题在大一真是一点理解不了,现在终于是可以理解了。
所谓冒泡排序,就像水中的气泡一样,小的数让他浮到最上边(当然这个最上边你可以自己定义,你可以说数组第一个元素是上边(从小到大),也可以说最后一个元素是最上边(从大到小))。
这里我介绍的是从大到小排序。
对于n个数,我们只需要排n-1趟(因为我们每一趟就可以确定一个元素的最终位置,还剩下最后一个元素他肯定就是最大或者最小,所以不用排了,就是n-1趟)
对于每一趟,我们需要知道这个数跟他后一个数的大小关系,比他后边那个数小我们就让他浮起来(即跟后边的数交换一下位置),如果他大于等于后边的数我们就让他卡在那里不要动,转而去浮那个比他小的数,以此类推。所以对于第0次,我们需要前后比较9次,对于第1次,我们需要前后比较8次(最后一个已经就位了,就不要去比较他了,所以将比较的上限向前进一),以此类推,第i次需要比较9-i次.
下面我以排10个整数为例。
#include <iostream> using namespace std; int main() { int a[10];//排10个数 int temp; cout<<"输入10个数:"; for(int i=0; i<10; i++) cin>>a[i]; for(int i=0; i<9; i++)//10个数只需要排9次 for(int j=0; j<9-i; j++)//每一次需要前后比较的次数为9-i { if(a[j]<a[j+1])//如果前一个数比后一个小就让他浮上去 { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } cout<<"排序后结果:"; for(int i=0; i<10; i++) cout<<a[i]<<ends; }
原文:https://www.cnblogs.com/xxxyyy/p/14074394.html