鱼C论坛

 找回密码
 立即注册
查看: 3251|回复: 1

[技术交流] 数据结构与算法--冒泡排序算法有问题

[复制链接]
发表于 2015-3-28 14:11:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zlQhs 于 2015-3-28 14:14 编辑

代码如下:
#include "stdafx.h"
#include <iostream>

#define DATA_SIZE 14

void BubbleSort1(int data[], int iDataSize)
{
        int iTemp = 0;
        int iCompareCount = 0;
        int iMoveCount = 0;
        for ( int i = 0; i < iDataSize - 1; i++)
        {
                for ( int j = i + 1; j < iDataSize; j++)
                {
                        iCompareCount++;
                        if ( data[i] > data[j] )
                        {
                                iMoveCount++;
                                iTemp = data[j];
                                data[j] = data[i] ;
                                data[i] = iTemp;
                        }
                }
        }
        printf("第一种冒泡排序:\n排序进行了%d次比较,进行了%d次移动\n", iCompareCount, iMoveCount);
}

void BubbleSort2(int data[], int iDataSize)
{
        int iTemp = 0;
        int iCompareCount = 0;
        int iMoveCount = 0;
        for ( int i = 0; i < iDataSize - 1; i++)
        {
                for ( int j = iDataSize - 1; j > i; j--)
                {
                        iCompareCount++;
                        if ( data[j - 1] > data[j] )
                        {
                                iMoveCount++;
                                iTemp = data[j - 1];
                                data[j - 1] = data[j] ;
                                data[j] = iTemp;
                        }
                }
        }
        printf("第二种冒泡排序:\n排序进行了%d次比较,进行了%d次移动\n", iCompareCount, iMoveCount);
}

void BubbleSort3(int data[], int iDataSize)
{
        int iTemp = 0;
        int iCompareCount = 0;
        int iMoveCount = 0;
        bool bFlag = true;

        for ( int i = 0; i < iDataSize - 1 && bFlag; i++)
        {
                for ( int j = iDataSize - 1; j > i; j--)
                {
                        iCompareCount++;
                        bFlag = false;
                        if ( data[j - 1] > data[j] )
                        {
                                iMoveCount++;
                                iTemp = data[j - 1];
                                data[j - 1] = data[j] ;
                                data[j] = iTemp;
                                bFlag = true;
                        }
                }
        }
        printf("第三种冒泡排序:\n排序进行了%d次比较,进行了%d次移动\n", iCompareCount, iMoveCount);
}

void printResult(int data[], int iDataSize)
{
        printf("排序后的结果是:");
        for ( int i = 0; i < iDataSize; i++)
        {
                printf("%d ", data[i]);
        }
        printf("\n\n");
}

void sort1()
{
        int data[DATA_SIZE] = {3,6,1,4,2,5,9,33,8,1,22,32,11,18};
        BubbleSort1(data, DATA_SIZE);
        printResult(data, DATA_SIZE);
}

void sort2()
{
        int data[DATA_SIZE] = {3,6,1,4,2,5,9,33,8,1,22,32,11,18};
        BubbleSort2(data, DATA_SIZE);
        printResult(data, DATA_SIZE);
}

void sort3()
{
        int data[DATA_SIZE] = {3,6,1,4,2,5,9,33,8,1,22,32,11,18};
        BubbleSort3(data, DATA_SIZE);
        printResult(data, DATA_SIZE);
}

int _tmain(int argc, _TCHAR* argv[])
{
        sort1();
        sort2();
        sort3();

        getchar();
        return 0;
}

运行结果如下:

QQ截图20150328140858.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-20 19:23:45 | 显示全部楼层
老师 当数组是  int[] a = new int[]{0,1,30,14,5,6,7,81,9,2222};  第三种冒充排序是错的吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 23:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表