zoukankan      html  css  js  c++  java
  • 算法一:冒泡算法

    所谓冒泡算法就是把排序想像成水里的水泡,小的在上面,大的在下面

    相邻的两个元素比较,如果前面的比后面的大,就交换。

    如有一组数据:3,6,2,1,9

    ->3,2,1,6,9

    ->2,1,3,6,9

    ->1,2,3,6,9

    int main()
    {
    	int a[] = {3,6,2,1,9};
    	for (int i = 0; i < sizeof(a)/4; i++)
    	{
    		for (int j = 0; j < sizeof(a)/4 - i - 1; j++)
    		{
    			if (a[j]>a[j + 1])
    			{
    				int temp = a[j];
    				a[j] = a[j + 1];
    				a[j + 1] = temp;
    			}
    		}
    	}
    	for (int i = 0; i < sizeof(a)/4; i++)
    	{
    		printf("%d   ", a[i]);
    	}
    	cin.get();
    }
    

    时间复杂度:如果已经是排好的则记录移动次数为n-1,移动数据为0,最好的复杂度为O(N);若文件为反序(最坏)排序为N-1次,每次

    排序需要进行N-1次比较,还要进行三次的数据交换。复杂度为O(N2)。空间复杂度为O(1)冒泡排序是一种稳定的排序.

    优化:

    可以添加一个标志位,如果数据进行了交换则将标记置为flase.如果标记一直为ture则说明,没有交换数据,已经排好序

    int main()
    {
    	int a[] = {3,6,2,1,9};
          bool flage = true;
    	for (int i = 0; i < sizeof(a)/4; i++)
    	{
                
    		for (int j = 0; j < sizeof(a)/4 - i - 1; j++)
    		{
    			if (a[j]>a[j + 1])
    			{
    				int temp = a[j];
    				a[j] = a[j + 1];
    				a[j + 1] = temp;
                                flage = false;
    			}
    		}
                    if(flage)
                        break;
    	}
    
    	for (int i = 0; i < sizeof(a)/4; i++)
    	{
    		printf("%d   ", a[i]);
    	}
    	cin.get();
    }
    
  • 相关阅读:
    关于组件(包括控件)设计的一些建议
    请教:不能运行asp程序了??
    (ASP.NET)几个概念与区别
    突然想起99年的那次离别
    什么是计划
    服务器控件开发基础应用设计期Attribute
    收藏些API资料
    今天的感觉呐喊
    重新启用本blog
    关于Clone
  • 原文地址:https://www.cnblogs.com/xiaoma123/p/5219619.html
Copyright © 2011-2022 走看看