• 纯手撸——冒泡排序


    思想:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。

    #include <stdio.h>
    int main()
    {
        int a[] = {9,6,5,7,8,2,1,3}; //自行修改
        int n=8;  //n为数组中元素个数,即长度
        int i;  
        int j;  
        int tmp;  //交换数据时临时存储用
        for (i=0; i<n-1; ++i)  //比较n-1轮
        {
            for (j=n-1; j>i; j--) 
            {
                if (a[j] < a[j-1]) //反序
                {	
                    //swap算法
                    tmp = a[j-1];
                    a[j-1] = a[j];
                    a[j] = tmp;
                }
            }
        }
        //输出
        for (i=0; i<n; i++)
        {
            printf("%dx20", a[i]);
        }
        printf("
    ");
    }
    

    比较简单,复盘一下:

    void BubbleSort(int a[],int n)
    {
    	int i,j,tmp;
    	for(i=0;i<n-1;i++)
    	{
    		for(j=n-1;j>i;j--)
    		{	
    			if(a[j-1]>[j]) //反序
    			{
    				//swap
    				tmp = a[j-1];
    				a[j-1]=a[j];
    				a[j]=tmp;
    			}
    		}
    	}
    }
    

    当然,有些情况,在i(i<n-1)趟已经排好了,但仍执行后面几趟比较,没必要,这里进行改进。因为该算法一旦某一趟比较时不出现任何元素交换,则一定排序好了,结束即可。

    void BubbleSort(int a[],int n)
    {
    	int i,j;
    	bool exchange; //标志
    	for(i=0;i<n-1;i++)
    	{
    		exchange=false; //先置为假
    		for(j=n-1;j>i;j--)
    		{
    			if(a[j]<a[j-1])
    			{
    				swap(a[j],a[j-1]); //略
    				exchange=true; //一旦交换,置true
    			}
    		}
    		if(!exchange) //本趟没有交换,中途结束算法
    		{
    			return;
    		}
    	}
    }
    
  • 相关阅读:
    E寻宝(贪心)
    千万别点进来,点进来你就哭了(最短路,dijkstra)
    H小明买年糕(前缀和+二分)
    Charles破解
    Jmeter安装插件
    appium环境搭建
    SourceTree安装和教程
    Appium-desktopAppium-desktop 安装与入门使用
    appium终端安装
    Seleinum_CSS定位方式
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/13474101.html
Copyright © 2020-2023  润新知