可以清理吗?
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; } } } }