经典算法,每个语言都出现的算法

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
  用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。
产生

  在许多程序设计中,我们需要将一个数列进行排序,以方便统计,常见的排序方法有冒泡排序,二叉树排序,选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍受青睐。
排序过程

  设想被排序的数组R〔1..N〕垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

using System;
using System.Collections;

namespace ConsoleApplication11
{
 
   public  class Program
    {
      
        static void Main(string[] args)
        {
            int swap = 0;
            int temp = 0;
      Console.WriteLine("please input the totalNumber");
            int N = Convert.ToInt32(Console.ReadLine());
            ArrayList arr=new ArrayList();
           Console.WriteLine("请输入n个数进行冒泡排序:");
            for (int i = 0; i < N; i++)
            {

                arr.Add(Convert.ToInt32(Console.ReadLine()));
            }
           for(int j=0;j<N-1;j++)
           {
               swap = 0;
               for (int m = 0; m < N-j-1; m++)
               {
                   if ((int)arr[m]>(int)arr[m+1])
                   {
                       swap = 1;
                       temp = (int)arr[m];
                       arr[m] = arr[m + 1];
                       arr[m+ 1] = temp;
                   }
                 
               }
               if (swap==0)
                   break;
           }
            for (int i = 0; i<arr.Count; i++)
            {
                Console.Write(arr[i]+" ");
            }
            Console.ReadLine();
        }
    }
}

一、冒泡排序(Bubble)
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();
  }
 }
}

二、选择排序(Selection)

using System;

namespace SelectionSorter
{
 public class SelectionSorter
 {
  private int min;
  public void Sort(int [] list)
  {
   for(int i=0;i<list.Length-1;i++)
   {
   min=i;
    for(int j=i+1;j<list.Length;j++)
    {
    if(list[j]<list[min])
    min=j;
    }
   int t=list[min];
   list[min]=list[i];
   list[i]=t;
   }
  }
 }

 public class MainClass
 {
  public static void Main()
  {
   int[] iArrary = new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
   SelectionSorter ss=new SelectionSorter();
   ss.Sort(iArrary);
   for (int m=0;m<iArrary.Length;m++)
   Console.Write("{0} ",iArrary[m]);
   Console.WriteLine();
  }
 }
}

三、插入排序(InsertionSorter)

using System;

namespace InsertionSorter
{
 public class InsertionSorter
 {
  public void Sort(int [] list)
  {
   for(int i=1;i<list.Length;i++)
   {
   int t=list[i];
   int j=i;
    while((j>0)&&(list[j-1]>t))
    {
    list[j]=list[j-1];
    --j;
    }
   list[j]=t;
   }
  }
 }

 public class MainClass
 {
  public static void Main()
  {
   int[] iArrary=new int[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
   InsertionSorter ii=new InsertionSorter();
   ii.Sort(iArrary);
   for(int m=0;m<iArrary.Length;m++)
   Console.Write("{0}",iArrary[m]);
   Console.WriteLine();
  }
 }
}

四、希尔排序(ShellSorter)

using System;

namespace ShellSorter
{
 public class ShellSorter
 {
  public void Sort(int [] list)
  {
  int inc;
  for(inc=1;inc<=list.Length/9;inc=3*inc+1);
   for(;inc>0;inc/=3)
   {
    for(int i=inc+1;i<=list.Length;i+=inc)
    {
    int t=list[i-1];
    int j=i;
     while((j>inc)&&(list[j-inc-1]>t))
     {
     list[j-1]=list[j-inc-1];
     j-=inc;
     }
    list[j-1]=t;
    }
   }
  }
 }

 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};
   ShellSorter sh=new ShellSorter();
   sh.Sort(iArrary);
   for(int m=0;m<iArrary.Length;m++)
   Console.Write("{0} ",iArrary[m]);
   Console.WriteLine();
  }
 }
}  

佛为心,道为骨,儒为表,大度看世界; 技在手,能在身,思在脑,从容过生活; 三千年读史,不外功名利禄; 九万里悟道,终归诗酒田园;
原文地址:https://www.cnblogs.com/taofx/p/4137205.html