zoukankan      html  css  js  c++  java
  • 《数据结构:邓俊辉版》——冒泡排序

    1、思路

    每次都是相邻两个数之间进行比较;

    每轮比较之后总是把最大的数或者最小的数筛选出来。

    2、源码

    #include <memory>
    
    void BubbleSort(int szArray[], int nLen);
    
    void main()
    {
    	int szArray[] = {6,4,8,1,9,13};
    	BubbleSort(szArray, _countof(szArray));
    	getchar();
    }
    
    void BubbleSort(int szArray[], int nLen)
    {
    	int nTmp = 0;
    	for (int j = 0; j < nLen - 1; j++)
    	{
    		for (int i = 0; i < nLen - j - 2; i++)
    		{
    			if (szArray[i] > szArray[i + 1])
    			{
    				nTmp = szArray[i + 1];
    				szArray[i + 1] = szArray[i];
    				szArray[i] = nTmp;
    			}
    		}
    	}
    
    	printf("Sorted:");
    	for (int i = 0; i < nLen; i++)
    	{
    		printf(" %d ", szArray[i]);
    	}
    	printf("
    ");
    }
    

     3、优化

    如果发现某一次循环已经全部有序了,那么就不再继续循环。

    void OptBubbleSort(int szArray[], int nLen)
    {
        int nTmp = 0;
        int nTmpLen = nLen;
        BOOL bSorted = FALSE;
    
        while (!bSorted)
        {
            bSorted = TRUE;
            for (int i = 0; i < nTmpLen - 2; i++)
            {
                if (szArray[i] > szArray[i + 1])
                {
                    nTmp = szArray[i + 1];
                    szArray[i + 1] = szArray[i];
                    szArray[i] = nTmp;
                    bSorted = FALSE;
                }
            }
            nTmpLen--;
        }
    
        printf("Sorted:");
        for (int i = 0; i < nLen; i++)
        {
            printf(" %d ", szArray[i]);
        }
        printf("
    ");
    }

    3、时间复杂度分析

    最理想状态下是O(n),平均状态下是O(n^2)

  • 相关阅读:
    ACM 2的N次方
    文件默认打开方式 转
    java 的 一点记录
    zhuan 漫谈C语言及如何学习C语言
    eclipse
    code::blocks
    心态决定命运_no excuses, suck it up, obey your teacher
    uml_2_application and viso application
    paint conflict with lingoes
    stm learning record
  • 原文地址:https://www.cnblogs.com/predator-wang/p/11756561.html
Copyright © 2011-2022 走看看