算法常识——鸡尾酒排序

前言

在前一节中,有冒泡算法的优化。
在这:https://www.cnblogs.com/aoximin/p/12251638.html。
什么是鸡尾酒排序呢?
比如说:
算法常识——鸡尾酒排序_第1张图片
我们仅仅需要把1放在第一个位置即可。
假设我们是从小到大排序,那么根据最大值冒泡,需要大量次数,根据最小值冒泡只需一次。
这时候就会提出疑问啊,那么就按照最小啊,那么如果数据一换,那么是不是变成最大值冒泡。
之所以鸡尾酒叫是因为有些气泡上升有些起码下沉。每循环一次一个上升一个下沉。

code

同样分析i和j:
算法常识——鸡尾酒排序_第2张图片
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+"\n");
        }
        Console.ReadKey();
    }
    public static void sort(int[] arr)
    {
        var temp = 0;
        var hasSore = true;

        for (var i=0;i 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;
            }
        }
    }
}

你可能感兴趣的:(算法常识——鸡尾酒排序)