一个冒泡算法

转载 2006年06月22日 11:47: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巧妙的冒泡算法

降序 a=new int[]{1,3,9,6,7,89}; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a.length; j...
  • nimeghbia
  • nimeghbia
  • 2015年09月19日 10:43
  • 975

java的冒泡算法

初学java  用冒泡算法写了一个bubble_sortde类完成冒泡算法 package algorithm; public class bubble_sort { private stati...
  • BDplan_Dante
  • BDplan_Dante
  • 2017年06月21日 17:08
  • 101

C# 实现冒泡算法

1、非递归算法 /// /// 使用两次循环 /// /// static void Sort(int[] ar...
  • wutingyou1314
  • wutingyou1314
  • 2014年06月13日 16:13
  • 238

冒泡算法--常见手写面试题

一道很常见的面试题,看似很简单,但面试时经常要求手写, 在面试略有压力的环境中,我们能发挥好吗? 好记性不如烂笔头,下面的代码都经过验证可运行的,以下均为Java代码。 1.网上最常见的冒泡...
  • xmc281141947
  • xmc281141947
  • 2017年04月17日 15:09
  • 862

体验C#——冒泡算法的C#实现

一、冒泡排序的基本流程。                                              二、C#代码实现 using System; using System.Colle...
  • C_Major
  • C_Major
  • 2014年12月04日 11:13
  • 1334

冒泡算法理解

冒泡排序的思想:中心思想是两两交换。 1.冒泡算法各层的含义: 1.1第一层含义 第一层循环与i的初始值无关,而只与循环了多少次有关。 冒泡排序第一层循环的含义为:需要遍历多次数组,才能将这个数组排好...
  • li_qcxy
  • li_qcxy
  • 2017年01月02日 01:47
  • 514

冒泡算法的时间复杂度问题

最近在学习算法过程中发现了一个小问题,在这里和大家分享一下。   在许多地方看到冒泡排序的最佳时间复杂度为O(n),于是自己写了个冒泡排序如下:   public void bubbleSort(...
  • mouqi123
  • mouqi123
  • 2014年11月30日 16:57
  • 700

iOS开发中使用算法之冒泡法

冒泡法是编程中知名度很高的算法,此算法能将一组无序的数据变成一组有序的数据。 冒泡法思路:如果是将无序的数据变成一组升序的数据,需要使用两层for循环。第一层循环是从第一个数据(我们假设为A)开始,第...
  • u010105969
  • u010105969
  • 2017年04月03日 22:42
  • 498

冒泡算法

网上还有很多关于冒泡算法的列子,在这里我主要利用的python中的分片及其分片赋值的原理来完成,^_^_^_^_^_^ ,在下一文章中我将尝试选择排序 [leo@hadoop ~]$ cat loo...
  • jixianqiuxue
  • jixianqiuxue
  • 2013年09月01日 14:07
  • 423

冒泡算法!!

 int[] a=new int[10];        private void button2_Click(object sender, EventArgs e)        {        ...
  • li_ser
  • li_ser
  • 2008年04月06日 13:59
  • 337
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个冒泡算法
举报原因:
原因补充:

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