回 帖 发 新 帖 刷新版面

主题:[原创]冒泡排序的C#算法

冒泡排序是一种非常简单的排序方法,设待排序的文件为(R1,R2...Rn),其对应关健字为(K1,K2...Kn).其基本思想是:从k1开始,依次比较两个相邻的关健字ki与k(i+1)大小,若ki>k(i+1)则交换Ri和R(i+1)的位置;否则,不进行交换.经过第一次交换后,关健字最大的记录排在最后n的位置上.第二次排序后,前n-1条记录中关健字最大的记录排到n-1的位置上,继续下去,直到不需要再交换为止.在最好的情况下,只需要一遍排序;最坏的情况,需要n-1次比较和交换.
     下面是用C#写的算法;
using System;

  

class sort
{
    static void Main(string[] args)
    {
        int[] ii={1,6,3,2,4,85,324,234,434,23,32,43,53,64,67};
        sort ss=new sort();
        
      ss.BubbleSort(ii);
        for(int k=0;k<ii.Length;++k)
        {
                Console.WriteLine(ii[k]);
            
        }
        
    }
    public void BubbleSort(int[] R)
    {
        int i,j,min;
        //交换标志
        bool exchange;
        //最多做R.Length-1趟排序
        for(i=0; i<R.Length; i++)
        {
            //本趟排序开始前,交换标志应为假
            exchange=false;
            for(j=R.Length-2; j>i; j--)
            {
                //交换条件
                if(R[j+1]<R[j])
                {
                    min=R[j+1];
                    R[j+1]=R[j];
                    R[j]=min;
                    //发生了交换,故将交换标志置为真
                    exchange=true;
                }
            }
            //本趟排序未发生交换,提前终止算法
            if(!exchange)
            {
                break;
            }
    }
        
    }
}

回复列表 (共6个回复)

沙发

程序可以运行,但是可不可以把代码写的更少呢
来实现这个功能

板凳

有沒有比較複雜的算法呢?這個太基礎的暸!!!

3 楼

有人回贴,虽然很少,但毕竟没冷场,多谢两位的回贴,以后会把几种基本算法再发上去。楼上大哥,也别太急,学东西也要一步步走啊!

4 楼

好贴。不错。

5 楼

using System;
namespace BubbleSorter
{
 public class BubbleSorter
 {
  public void Sort(int [] list)
  {
   int i,j,temp;
   bool done=false;
   j=1;
   while((j<list.Length)&&(!done))
   {
    done=true;
    for(i=0;i<list.Length-j;i++)
    {
     if(list[i]>list[i+1])
     {
      done=false;
      temp=list[i];
      list[i]=list[i+1];
      list[i+1]=temp;
     }
    }
    j++;
   }
  }
 }
 public class MainClass
 { 
  public static void Main()
  {
   int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
   BubbleSorter sh=new BubbleSorter();
   sh.Sort(iArrary);
   for(int m=0;m<iArrary.Length;m++)
    Console.Write("{0} ",iArrary[m]); 
   Console.WriteLine();
  }
 }
}

6 楼

努力吧~

我来回复

您尚未登录,请登录后再回复。点此登录或注册