---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------
1. 冒泡排序法
冒泡排序法的思路:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。
在第二趟:仍從第一對數開始比較(因爲可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。
如此下去,重複以上過程,直至最終完成排序。
下面用一個例子來演示冒泡排序法的執行過程:
原始順序:60,30,80,10,70,20,50,90,40
第一趟:30,60,10,70,20,50,80,40,90
第二趟:30,10,60,20,50,70,40,80,90
第三趟:10,30,20,50,60,40,70,80,90
第四趟:10,20,30,50,40,60,70,80,90
第五趟:10,20,30,40,50,60,70,80,90
第六趟:10,20,30,40,50,60,70,80,90
第七趟:10,20,30,40,50,60,70,80,90
第八趟:10,20,30,40,50,60,70,80,90
小結一下:
1) 用冒泡排序,n 個數需要進行n-1 趟外層循環;
2) 第j 趟循環中需要進行n-j次兩兩比較(內循環)。
代碼:
static void Main(string[] args)
{
int[] a = { 60, 30, 80, 10, 70, 20, 50, 90, 40 };
int[] sorted1 = BubbleSort(a); //調用冒泡排序方法
Console.WriteLine("從小到大排序,冒泡排序法得到的結果爲:");
for (int i = 0; i < sorted1.Length; i++)//循環輸出排序後的數組元素
{
Console.Write(sorted1[i] + " ");
}
Console.ReadKey();
}
public static int[] BubbleSort(int[] arr)//冒泡排序法
{
int temp;
for (int i = 0; i < arr.Length - 1; i++)//外層循環控制趟數,循環一次表示比較了一趟
{
for (int j = 0; j < arr.Length - 1 - i; j++)//內層控制第i趟需要進行的兩兩比較的次數
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];//交換位置,把較大數放到後邊
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
輸出:
2. 選擇排序法
選擇排序的思想:已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[1]與a[3]的值,若a[1]大於a[3]則交換兩者的值,否則不變。再比較a[1]與a[4],以此類推,最後比較a[1]與a[n]的值。這樣處理一輪後,a[1]的值一定是這組數據中最小的。再將a[2]與a[3]~a[n]以相同方法比較一輪,則a[2]的值一定是a[2]~a[n]中最小的。再將a[3]與a[4]~a[n]以相同方法比較一輪,以此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以升序排列了。
代碼:
static void Main(string[] args)
{
int[] b= { 40, 90, 10, 70, 50, 80, 20, 60, 30 };
int[] sorted2=SelectionSort(b);//調用選擇排序法
Console.WriteLine("從小到大排序,選擇排序法得到的結果爲:");
for (int i=0; i<sorted2.Length; i++)
{
Console.Write(sorted2[i] +" ");
}
Console.ReadKey();
}
public static int[] SelectionSort(int[] arr)//選擇排序法
{
int min;
for (int i=0; i<arr.Length-1; i++) //控制循環的趟數
{
min=i;
for (int j=i+1; j<arr.Length ; j++)
{
if (arr[j] <arr[min])
min=j;
}
int temp=arr[min]; //交換位置,把較小數放到arr[min]的位置
arr[min] =arr[i];
arr[i] =temp;
}
return arr;
}
輸出:
3. 插入排序法
插入排序算法執行過程:
⒈ 從第一個元素開始,該元素可以認爲已經被排序
⒉ 取出下一個元素,在已經排序的元素序列中從後向前掃描
⒊ 如果該元素(已排序)大於新元素,將該元素移到下一位置
⒋ 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
⒌ 將新元素插入到下一位置中
⒍ 重複步驟2
代碼:
static void Main(string[] args)
{
int[] c= { 3, 1, 8, 5, 0, 4, 2, 9, 7, 6 };
int[] sorted3=InsertionSort(c);//調用插入排序法
Console.WriteLine("從小到大排序,插入排序法得到的結果爲:");
for (int i=0; i<c.Length; i++)
{
Console.Write(sorted3[i]+" ");
}
Console.ReadKey();
}
public static int[] InsertionSort(int[] list)
{
for (int i=1; i<list.Length; i++)
{
int t=list[i];//要插入的數
int j=i;//定義遊標
//要插入的數字從後向前與每一個元素依次進行比較
while ((j>0) && (list[j-1] >t))//如果前一個元素大於要插入的t
{
list[j] =list[j-1];//使前一個元素(較大的)後¨移一位
--j;//遊標向前走,繼續與前邊的元素進行比較?
}
list[j] =t;//如果前一個元素不大於t,則把t插入到該元素之後這個位置
}
return list;
}
輸出:
---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------
詳細請查看:http://edu.csdn.net