3冒泡排序

所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。具体方法是,相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。一般地,如果有N个数需要排序,则需要进行(N-1)趟。

设数组长度为N。

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

/************************

          入门版程序

************************/
<pre name="code" class="cpp">void sort( int s[ ] , int n )
{
    
    for( i = 1; i < n; i++)
    {
        for( j = 1; j < n; j++)
        {    
            if( a[j] > a[j + 1] )
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
}

<pre name="code" class="cpp"><span style="font-size:18px;">优化版,设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。</span>
void sort( int s[ ] , int n ){   int i,  j,  t ;

   bool flag;

   flag = TRUE;

   while( flag )

  {

         glag = FALSE;

         for( i = 1; i < n; i++)        {             for( j = 1; j < n; j++)                {                            if( a[j] > a[j + 1] )                         {                             t = a[j];                             a[j] = a[j+1]

                             a[j+1] = t;

                            flag = TRUE;

                        }                }    }

}

}



main()
{
    int i, j, t, a[11];
    printf("INPUT 10 NUM : \n");
    for( i = 1; i < N; i++)
        scanf("%d",&a[i]);
    printf("The num is : \n");
    for( i = 1; i < N; i++)
        printf("%5d",a[i]);
    printf("\n");        

   

    sort (  a, 10)

    printf("the sorted num : \n");
    for( i =1; i <= 10; i++)
        printf("%5d",a[i]);
    printf("\n");
}   


发布了11 篇原创文章 · 获赞 6 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览