在C#中进行冒泡排序的最优雅方法是什么?

前端之家收集整理的这篇文章主要介绍了在C#中进行冒泡排序的最优雅方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可以清理吗?
using System;  
class AscendingBubbleSort 
{     
    public static void Main()
    {
        int i = 0,j = 0,t = 0;
        int []c=new int[20];
        for(i=0;i<20;i++)
        {
            Console.WriteLine("Enter Value p[{0}]:",i);
            c[i]=int.Parse(Console.ReadLine());
        }
        // Sorting: Bubble Sort
        for(i=0;i<20;i++)
        {
            for(j=i+1;j<20;j++)
            {
                if(c[i]>c[j])
                {
                    Console.WriteLine("c[{0}]={1},c[{2}]={3}",i,c[i],j,c[j]);
                    t=c[i];
                    c[i]=c[j];
                    c[j]=t;
                }
            }
        }
        Console.WriteLine("bubble sorted array:");
        // sorted array output
        for(i=0;i<20;i++)
        {
            Console.WriteLine ("c[{0}]={1}",c[i]);
        }
    }
}

解决方法

你在那里粘贴的东西不是 bubble sort.它是一种“蛮力”类型,但它不是泡沫排序.这是一个通用冒泡排序的例子.它使用任意比较器,但允许您省略它,在这种情况下,默认比较器用于相关类型.它将对IList< T>的任何(非读取)实现进行排序,其包括数组.阅读上面的链接(到维基百科),以更多地了解冒泡排序是如何工作的.注意我们从开始到结束的每个循环如何,但只将每个项目与其邻居进行比较.它仍然是一种O(n2)排序算法,但在许多情况下它会比你给出的版本更快.
public void BubbleSort<T>(IList<T> list)
{
    BubbleSort<T>(list,Comparer<T>.Default);
}

public void BubbleSort<T>(IList<T> list,IComparer<T> comparer)
{
    bool stillGoing = true;
    while (stillGoing)
    {
        stillGoing = false;
        for (int i = 0; i < list.Count-1; i++)
        {
            T x = list[i];
            T y = list[i + 1];
            if (comparer.Compare(x,y) > 0)
            {
                list[i] = y;
                list[i + 1] = x;
                stillGoing = true;
            }
        }
    }
}

猜你在找的C#相关文章