鸡尾酒排序

类别:排序-交换排序
参看 维基百科的定义

鸡尾酒排序 ,也就是定向冒泡排序 , 鸡尾酒搅拌排序 , 搅拌排序 (也可以视作选择排序 的一种变形), 涟漪排序 , 来回排序 or 快乐小时排序 , 是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。

using System;
using System.Collections.Generic;

namespace Com.Colobu.Algorithm.Exchange
{
   
/// <summary>
   
/// <b>鸡尾酒排序</b>,也就是双向冒泡排序(bidirectional bubble sort), 鸡尾酒搅拌排序, 搅拌排序
   
/// (也可以视作选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序,
   
/// 是冒泡排序的一种变形。
   
/// 此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
   
///
   
/// 平均时间复杂度:O(n^2)
   
/// Stability:Yes
   
/// </summary>
   
public class CocktailSortAlgorithm
   
{
       
public static void CocktailSort<T>(IList<T> szArray) where T : IComparable
       
{
           
int bottom = 0;
           
int top = szArray.Count - 1;
           
bool swapped = true;
           
while (swapped == true) // if no elements have been swapped, then the list is sorted
           
{
                swapped
= false;
               
for (int i = bottom; i < top; i = i + 1)
               
{
                   
if (szArray[i].CompareTo(szArray[i + 1]) > 0)  // test whether the two elements are in the correct order
                   
{
                       
Swap(szArray,i,i + 1); // let the two elements change places
                        swapped
= true;
                   
}
               
}
               
// decreases top the because the element with the largest value in the unsorted
               
// part of the list is now on the position top
                top
= top - 1;
               
for (int i = top; i > bottom; i = i - 1)
               
{
                   
if (szArray[i].CompareTo(szArray[i - 1]) < 0)
                   
{
                       
Swap(szArray,i,i - 1);
                        swapped
= true;
                   
}
               
}
               
// increases bottom because the element with the smallest value in the unsorted
               
// part of the list is now on the position bottom
                bottom
= bottom + 1;
           
}
       
}

       
private static void Swap<T>(IList<T> szArray, int i,int j)
       
{
            T tmp
= szArray[i];
            szArray
[i] = szArray[j];
            szArray
[j] = tmp;
       
}
   
}
}


转载请注明:来自鸟窝
本文地址:http://www.colobu.com/?p=3004



0 条评论

我要留言