冒泡是一个经典算法

原创 2006年06月20日 23:21:00

冒泡是一个经典算法。

本段代码增加了一些优化:

增加 b_exchange ,若本轮冒泡没有交换数据,则表示排序成功,退出
增加 n_exchange, n_head ,记录最近的交换位置,下轮冒泡只要冒到该位置即可

 /********************************************************************
    created:    2006/06/15
    filename:   C:/Documents and Settings/Administrator/桌面/tmmp/poposort.c
    file path:  C:/Documents and Settings/Administrator/桌面/tmmp
    file base:  poposort
    file ext:   c
    author:     A.TNG
    version:    0.0.1
   
    purpose:    冒泡排序的实现(优化)
                增加 b_exchange ,若本轮冒泡没有交换数据,则表示排序成功,退出
                增加 n_exchange, n_head ,记录最近的交换位置,下轮冒泡只要冒到该位置即可
*********************************************************************/
#include <stdio.h>
#include <stdlib.h>

/*
 *  name: poposort
 *  params:
 *    polist            [in/out]        待排序的 int 数组
 *    n                 [in]            int 数组的长度
 *  return:
 *    1-成功 0-失败
 *  notes:
 *    对 polist 进行冒泡排序
 * 
 *  author: A.TNG 2006/06/15 9:00
 */
int poposort(int *polist, int n)
{
    int i, j;
    int n_exchange;

    if (NULL == polist)
        return 0;

    n_exchange = 0;
    for (i = 0; i < n - 1; i++)
    {
        /* 最外层循环,冒泡排序需要比较 n-1 轮 */
        int b_exchange;
        int n_head;

        b_exchange = 0;
        n_head = n_exchange;
        for (j = n - 1; j >= n_head + 1; j--)
        {
            /* 第 i 轮比较,把最轻的泡冒置第 i 个位置 */
            if (polist[j] < polist[j - 1])
            {
                int n_tmp_num;

                n_tmp_num = polist[j];
                polist[j] = polist[j - 1];
                polist[j - 1] = n_tmp_num;

                b_exchange = 1;
                n_exchange = j;
            } /* end-if */
        } /* end-for */

        /* 若第 i 轮冒泡结束,并没有交换数据,则表示已经排序完成 */
        if (0 == b_exchange)
            return 1;
    } /* end-for */
    return 1;
}

/*
 *  name: main
 *  params:
 *    none
 *  return:
 *    none
 *  notes:
 *    none
 * 
 *  author: A.TNG 2006/06/15 9:05
 */
int main()
{
    // int polist[10] = {45,12,43,11,32,34,91,58,20,82};
    int polist[10]  =
    {
        0, 1, 2, 3, 4, 5, 6, 7, 9, 8
    };

    (void) poposort(polist, 10);

    system("PAUSE");
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JAVA经典算法-冒泡排序和快速排序

1:Java中的经典算法之冒泡排序(Bubble Sort) 1) 基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

白话经典算法系列笔记一冒泡排序

一直以来都想好好补补算法的东西,正好看到IT面试了

经典算法之二:冒泡排序及优化

【1】冒泡排序理论 (1)基本概念 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 冒泡排序的时间复杂度为O(n*n)。 冒泡排序具有稳定性(参见随笔《常用排...

白话经典算法系列之一 冒泡排序的三种实现

冒泡排序是非常容易理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2.这样对数组的第0个数据到N-1个数据进行一...

经典算法回顾:冒泡排序(又称交换排序)

a. 基本思想: 有 N个数字组成的无序数列S[n], 1.先比较s[0],s[1],如果 s[0]>s[1],则将s[0],s[1] 换位,也就是将大的数右移,否则直接进入2. 2.比较s...

经典算法---冒泡排序

冒泡排序(BubbleSort)以其“在排序过程中相邻元素不断交换,一些元素慢慢被换到最后,看起来就像是元素在冒泡一样”而得名,是一种简单的基于关键词比较的排序算法。   算法原理 冒泡排序的...

经典算法:冒泡排序和选择排序

哎,就这样吧,忙来忙去才测试了两个排序算法,还是自己太笨了,数据结构是个好东西,可以学到很多东西呢,以后要好好的认真的学习一下. 今天主要学习,或者说是复习的(因为以前是接触过这两个算法的)算法...

浅谈PHP第二弹---经典算法的运用(冒泡排序和快速排序)

首先说说冒泡排序的思想,那很多同学会问什么是冒泡排序法呢? 下面我来解释下: 所谓的冒泡排序法,就是依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2...

经典算法(一):冒泡排序

校园招聘马上就要来临了,作为过来人,算法在笔试中必考,因为毕竟是学生,大部分没有项目经验,只能问一些基础的知识!今天带大家学习算法中的经典:冒泡排序,也是去年我参加笔试考的最多的算法之一。一、算法描述...

经典算法:二分查找、插入排序、选择排序、冒泡排序

这4个算法真的堪称经典,里面包含了许多数学思想,面试的时候也经常被问到。排序的话面试官一般会问你最熟悉的一种排序深入点的会问这几种排序的依据,二分查找更为重要,比起排序查找算是比较简单的了。下面我自己...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)