• 算法常识——鸡尾酒排序


    前言

    在前一节中,有冒泡算法的优化。
    在这:https://www.cnblogs.com/aoximin/p/12251638.html。
    什么是鸡尾酒排序呢?
    比如说:

    我们仅仅需要把1放在第一个位置即可。
    假设我们是从小到大排序,那么根据最大值冒泡,需要大量次数,根据最小值冒泡只需一次。
    这时候就会提出疑问啊,那么就按照最小啊,那么如果数据一换,那么是不是变成最大值冒泡。
    之所以鸡尾酒叫是因为有些气泡上升有些起码下沉。每循环一次一个上升一个下沉。

    code

    同样分析i和j:

    i依然是确定的个人。
    最大值和最小值每次循环各确定一次。
    假设arr.length 是偶数,需要确定的个数:arr.length/2个。
    假设arr.length 是基数,同样需要确定:(arr.length-1)/2个。
    i取最大值arr.length。

    class Program
    {
    	static void Main(string[] args)
    	{
    		int[] intarr = new int[] {1,6,8,2,3,5,10,48,9 };
    		sort(intarr);
    		foreach(var i in intarr)
    		{
    			Console.Write(i+"
    ");
    		}
    		Console.ReadKey();
    	}
    	public static void sort(int[] arr)
    	{
    		var temp = 0;
    		var hasSore = true;
    
    		for (var i=0;i<arr.Length/2;i++)
    		{
    			for (var j=i;j< arr.Length-1-i; j++)
    			{
    				if (arr[j] > arr[j + 1])
    				{
    					temp = arr[j+1];
    					arr[j + 1] = arr[j];
    					arr[j] = temp;
    					hasSore = false;
    				}
    			}
    			if (hasSore)
    			{
    				break;
    			}
    			for (var j = arr.Length - 1-(i+1); j-1 >=i; j--)
    			{
    				if (arr[j] < arr[j - 1])
    				{
    					temp = arr[j-1];
    					arr[j - 1] = arr[j];
    					arr[j] = temp;
    					hasSore = false;
    				}
    			}
    			if (hasSore)
    			{
    				break;
    			}
    		}
    	}
    }
    
  • 相关阅读:
    java基础测试
    java随笔
    Android 开机广播的使用
    ZOJ 3715 Kindergarten Election
    LightOJ 1051
    LightOJ 1042
    LightOJ 1049
    LightOJ 1048
    LeightOJ 1046
    LightOJ 1045
  • 原文地址:https://www.cnblogs.com/aoximin/p/12252198.html
Copyright © 2020-2023  润新知