C#下幾種排序演算法

來源:互聯網
上載者:User

前言

  下午開發一個功能涉及到排序,這裡就列舉集中並作簡單效能對比。本文是作為記錄用的也就不多廢話了,直接上代碼。

 public class Sort
{

public void Test()
{
int Num = 10000;

int[] iArrary = GetList(Num);
Stopwatch watch = new Stopwatch();
watch.Start();
BubbleSorter(iArrary);
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds.ToString());
//Desplay(iArrary);

iArrary = GetList(Num);
watch.Reset();
watch.Start();
SelectionSorter(iArrary);
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds.ToString());
//Desplay(iArrary);

iArrary = GetList(Num);
watch.Reset();
watch.Start();
InsertionSorter(iArrary);
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds.ToString());
//Desplay(iArrary);

iArrary = GetList(Num);
watch.Reset();
watch.Start();
ShellSorter(iArrary);
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds.ToString());
//Desplay(iArrary);
}

private int[] GetList(int Num)
{
int[] array = new int[Num];
Random rd = new Random();
for (int i = 0; i < Num; i++)
{
array[i] = rd.Next(0, Num);
}
return array;
}

private void Desplay(int[] list)
{
foreach (int item in list)
{
Console.WriteLine(item.ToString());
}
}

/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="list"></param>
public void BubbleSorter(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++;
}
}

/// <summary>
/// 選擇排序
/// </summary>
/// <param name="list"></param>
public void SelectionSorter(int[] list)
{
int min;
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;
}
}

/// <summary>
/// 插入排序
/// </summary>
/// <param name="list"></param>
public void InsertionSorter(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;
}
}

/// <summary>
/// 希爾排序
/// </summary>
/// <param name="list"></param>
public void ShellSorter(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;
}
}
}
}

num=100     則四種演算法都是0MS。

num=1000   冒泡6,選擇3,插入2,希爾2

num=10000 冒泡612,選擇309,插入189,希爾182

做個簡單記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.