1.冒泡排序
口訣:
外層循環 n-1; |
內層循環 n-1-i; |
兩兩比較做互換; |
以下代碼在控制檯操作,輸入數字以‘逗號’隔開
Console.WriteLine("請輸入一組數字:");
string str = Console.ReadLine();
string[] num = str.Split(','); // 獲取到每個數
int[] numlist=new int[num.Length];
for (int i = 0; i < num.Length; i++)
{
numlist[i] = int.Parse(num[i]); // 將每個數存儲到numlist數組中
}
for (int i = 0; i < numlist.Length-1; i++)
{
for (int j = 0; j < numlist.Length-1-i; j++)
{
if (numlist[j]<numlist[j+1]) //此數小於後一個數,兩個數交換,從大到小排列
{
int temp = numlist[j];
numlist[j] = numlist[j + 1];
numlist[j + 1] = temp;
}
}
}
Console.WriteLine("排序結果爲:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(numlist[i]+",");
}
Console.ReadLine();
程序執行結果:
2.插入排序
int[] numlist = { 3, 6, 88, 35, 1, 45, 7 };
Console.WriteLine("排列前一組數字:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" " + numlist[i]);
}
for (int i = 1; i < numlist.Length; i++)
{
int temp = numlist[i];
for (int j = i-1; j >=0; j--) // 遍歷排在此數前面的數
{
if (numlist[j]>temp) // 如果前面的一個數大於此數,交換位置,知道前面數比此數小爲止
{
numlist[j + 1] = numlist[j];
numlist[j] = temp;
}
else
{
break;
}
}
}
Console.WriteLine("\r\n"+"排序結果爲:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
Console.ReadLine();
程序執行結果:
3.選擇排序
int[] numlist = { 33, 2, 6, 89, 11 };
Console.WriteLine("排列前一組數字:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
//總共要進行n-1輪比較
for (int i = 0; i < numlist.Length-1; i++)
{
int min =i;
//每輪需要比較的次數n-i
for (int j = i+1; j < numlist.Length; j++)
{
if (numlist[min]>numlist[j]) // 當此數大於後一個數
{
// 記錄目前能找到的最小值元素的下標
min = j;
}
}
int temp = numlist[i];
numlist[i] = numlist[min];
numlist[min] = temp;
}
Console.WriteLine("\r\n"+"排序後結果爲:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
Console.ReadLine();
程序執行結果:
4.快速排序
5.希爾排序
插入排序的升級
static void Main(string[] args)
{
int[] numlist = { 33, 6, 89, 34, 63, 2, 7 };
Console.WriteLine("排序前數組:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
// 將每組間隔爲h的分組進行排序,剛開始h=數組長度的一半
for (int h = numlist.Length/2; h >0; h/=2)
{
//對每組進行插入排序
for (int i = h; i < numlist.Length; i++)
{
// 將numlist[i]插入到所在分組的正確位置上
insertI(numlist, h, i);
}
}
Console.WriteLine("\r\n排序後結果:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
Console.ReadLine();
}
// 插入排序的方法
private static void insertI(int[] arr,int h, int i)
{
int temp = arr[i];
int k;
for ( k= i-h; k>=0 && temp<arr[k]; k-=h)
{
arr[k + h] = arr[k];
}
arr[k + h] = temp;
}
程序執行結果:
借鑑於: https://www.cnblogs.com/itsharehome/p/11058010.html
6.堆排序
7.歸併排序
8.計數排序
9.桶排序
10.基數排序