一个冒泡算法

转载 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;
}

相关文章推荐

一个很简单的冒泡排序算法

  • 2011年07月29日 15:13
  • 719KB
  • 下载

实现一个冒泡排序算法。

先定义一组数组 第一轮比较   3, 4, 7, 8, 9, 22  ----> n-1  最后一个数正确 第二轮比较   3, 4, 7, 8, 9, 22  ----> n-2...

C++ 一个程序兼容冒泡、插入、基数三种排序算法

#include using namespace std; template void BubbleSort(T& nData,int len) { bool isOk = false; ...

第十五周实验报告一(实现冒泡排序算法,并将之定义为一个函数)

第15周报告1: 实验目的:学会冒泡排序算法 实验内容:实现冒泡排序算法,并将之定义为一个函数 * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 201...

java编程题:用Java实现一个冒泡排序算法

/** * java编程题:用Java实现一个冒泡排序算法 */ public class Test { public static void main(String[] args) { ...

C++程序设计实验报告(十七)----实现冒泡排序算法,并将之定义为一个函数

第15周报告1: 实验目的:学会冒泡排序算法 实验内容:实现冒泡排序算法,并将之定义为一个函数 * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 201...

编程产生一个int数组,长度为30,并向其中随机插入1-30,并且不能重复输出数组。实现一个冒泡排序算法对其进行排序,输出排序结果

创建控制台       using System; using System.Collections.Generic; using System.Linq; using System.Tex...

一个简单的冒泡排序

  • 2014年05月06日 22:10
  • 496B
  • 下载

用java写的一个冒泡排序器

  • 2013年10月31日 23:18
  • 13KB
  • 下载

写一个通用的冒泡排序函数

提到通用,我们首先想到的就是模板了。 函数内部就是冒泡排序的实现了,我们看一下。//我们先写一个升序排列,一会再对它进行改造一下 template void BubbleSort(T*arr,siz...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个冒泡算法
举报原因:
原因补充:

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