冒泡排序法

冒泡排序法:思想

   以n个人排队为例,从第1个开始,依次比较相邻的两个人是否逆序(高在前矮在后),若逆序则交换这两个人,即第一个人和第二个人比较哦,若逆序,交换两个人,接着比较第二个人和第三个人,若逆序交换连个人,接着比较第三个人和第四个人,若逆序交换两个人。。。。。。,直到第n-1个人和第n个人比较,经过一轮比较后,则把最高的人排到最后,即将最高的人像冒泡一样逐步冒到相应的位置。原n个人的问题转换成n-1个人的排序问题。第二轮比较从第一个人开始,直到第n-2个人和第n-1个人比较;如此,进行n-1轮后队列为有序队列。(如下图动画)

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    cin>>a[i];
    
    //冒泡排序
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)//n-1-i中i表示比较的轮数,i轮后数组后面i个数已经是最大值并排好序了,所以下一轮比较的时候后卖弄的i个数就不参与比较了 
        {
            if(a[j]>a[j+1])//比较相邻的两个数 
            {
                int t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    } 
    //输出排序后的数组
    for(int i=0;i<n;i++)
    cout<<a[i]<<" "; 
} 

 

posted @ 2019-01-06 16:14  Nikel  阅读(167)  评论(0编辑  收藏  举报