• 《数据结构:邓俊辉版》——冒泡排序


    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)

  • 相关阅读:
    three之位置检查
    Cesium之屏蔽光照方向受时间的影响
    H5实现聚合支付及踩坑 广东靓仔
    聚合支付设计方案 广东靓仔
    nuxt.js使用vuei18n实现多语言,SSR 广东靓仔
    17. 电话号码的字母组合(dfs)
    sql 笔记
    215. 数组中的第K个最大元素(快排,堆排序)
    c++ print rapidjson
    堆排序
  • 原文地址:https://www.cnblogs.com/predator-wang/p/11756561.html
Copyright © 2020-2023  润新知