程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> C#中的個別排序方法,

C#中的個別排序方法,

編輯:關於.NET

C#中的個別排序方法,


 

                   C#學習中的一些算法排序,不完整, @^_^@

                                                                 -------- 2016-10-23  

 

      ***************************************************************************************************

1.冒泡排序

  對比相鄰的元素值,滿足條件就交換兩個元素的位置,把較小的移到數組前邊,較大的數移到數組後邊,這樣較小的元素就像氣泡上升到前面,較大的像氣泡移到後邊。

 1     class Program
 2     {
 3         static void Maopao(int[] arr)
 4         {
 5             bool f = false;
 6             do
 7             {
 8                 f = false;
 9                 for (int i = 0; i < arr.Length - 1; i++)
10                 {
11                     if (arr[i] > arr[i + 1])
12                     {
13                         int temp = arr[i];
14                         arr[i] = arr[i + 1];
15                         arr[i + 1] = temp;
16                         f = true;
17                     }
18                 }
19             } while (f);
20         } 
21         static void Main(string[] args)
22         {
23             int[] list = new int[] { 2, 5, 1, 8, 45, 23, 20, 12 };
24             Maopao(list);
25             foreach (var item in list)
26             {
27                 Console.WriteLine(item);
28             }
29             Console.ReadKey();
30         }
31     }

 

 1     class Program
 2     {
 3         static void Maopao(int[] arr)
 4         {
 5             for (int i = 1; i < arr.Length; i++)//
 6             {
 7                 for (int j = 0; j < arr.Length-i; j++)
 8                 {
 9                     if(arr[j] > arr[j+1])
10                     {
11                         int temp = arr[j];
12                         arr[j] = arr[j + 1];
13                         arr[j + 1] = temp;
14                     }
15                 }
16             }
17         }
18         static void Main(string[] args)
19         {
20             int[] list = new int[] { 2, 5, 1, 8, 45, 23, 20, 12 };
21             Maopao(list);
22             foreach (var item in list)
23             {
24                 Console.WriteLine(item);
25             }
26             Console.ReadKey();
27         }
28     }

 

 2.選擇排序

  (本人的理解)操作一:將第一位數假設為最大值或者最小值與後邊的數進行比較,而後將最大的值或者最小的值和第一位的數交換

          操作二:將第二位數和他後邊的數進行比較交換,重復操作一。

         以此類推,排序。

 【選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第一個[5]與[3]交換,導致第一個5挪動到第二個5後面)。】

 

 1     class Program
 2     {
 3         static void SelectSort(int[] arr)
 4         {
 5             int length = arr.Length;
 6             for (int i = 0; i < length-1; i++)
 7             {
 8                 int temp=arr[i];//元素值
 9                 int em=i;//索引
10                 for (int j = i+1; j < length; j++)
11                 {
12                     if (arr[j] < temp)
13                     {
14                         temp = arr[j];
15                         arr[j] = arr[em];
16                         arr[em] = temp;
17                     }
18                 }
19             }
20         }
21         static void Main(string[] args)
22         {
23             int[] list = new int[] { 2, 5, 1, 8, 45, 23, 20, 12 };
24             SelectSort(list);
25             foreach (var item in list)
26             {
27                 Console.WriteLine(item);
28             }
29             Console.ReadKey();
30         }
31     }

 

 1     class Program
 2     {
 3         static void SelectSort(int[] arr)
 4         {
 5             int length = arr.Length;
 6             for (int i = 0; i < length-1; i++)
 7             {
 8                 int min=arr[i];//元素值
 9                 int em=i;//索引
10                 for (int j = i+1; j < length; j++)
11                 {
12                     if (arr[j] < min)
13                     {
14                         min = arr[j];
15                         em = j;
16                     }
17                 }
18                 if(em != i)
19                 {
20                     int temp = arr[i];
21                     arr[i] = arr[em];
22                     arr[em] = temp;
23                 }
24             }
25         }
26         static void Main(string[] args)
27         {
28             int[] list = new int[] { 2, 5, 1, 8, 45, 23, 20, 12 };
29             SelectSort(list);
30             foreach (var item in list)
31             {
32                 Console.WriteLine(item);
33             }
34             Console.ReadKey();
35         }
36     }

 

3.直接排序

  直接排序是從第一位元素開始,依次取第二個數及其後邊的數與前邊的數比較進行分批次排序的。

 1     class Program
 2     {
 3         static void DirectSort(int[] arr)
 4         {
 5             int length = arr.Length;
 6             bool f = false;
 7             for (int i = 1; i < length; i++)
 8             {
 9                 int temp = arr[i];//保留i的位置,避免被覆蓋
10                 f = false;
11                 //拿到i位置的元素,和前面所有元素比較,發現比i大的就向後移動
12                 for (int j = i-1; j >= 0; j--)//從後向前
13                 {
14                     if (arr[j] > temp)
15                     {
16                         arr[j + 1] = arr[j];//向後移動
17                     }
18                     else
19                     {
20                         arr[j + 1] = temp;
21                         f = true;
22                         break;
23                     }
24                 }
25                 if(f==false)
26                 {
27                     arr[0] = temp;
28                 }
29             }
30         }
31         static void Main(string[] args)
32         {
33             int[] list = new int[] { 2, 5, 1, 8, 45, 23, 20, 12 };
34             DirectSort(list);
35             foreach (var item in list)
36             {
37                 Console.WriteLine(item);
38             }
39             Console.ReadKey();
40         }
41     }

 

4.快速排序法

  操作一:一列數,先把第一位數看做是基准數A(標兵),把小於A的數放在A的左邊,大於A的數放在右邊;

  操作二:再將左邊和右邊的數列分別重復操作一

  以此類推,直至排好

 1     class Program
 2     {
 3         /// <summary>
 4         /// 對數組arrea中索引從left到right之間的數做排序
 5         /// </summary>
 6         /// <param name="arrea">要排序的數組</param>
 7         /// <param name="left">要排序數據的開始索引</param>
 8         /// <param name="right">要排序數據的結束索引</param>
 9         static void QuickSort(int[] arrea, int left, int right)
10         {
11             if (left < right)//left到right之間的數據做排序
12             {
13                 //首先取得一個基准數,把比他小或者等於他的放在它的左邊,然後把比他大的放在它的右邊
14                 int temp = arrea[left];
15                 int i = left;
16                 int j = right;//用來做循環的標志位
17                 while (true && i < j)//當i==j時候,表示找到了一個中間位置,這個中間位置就是基准數應該所在的位置
18                 {
19                     //排序。從後向前進行比較,將後邊的比基准書小或者等於的放到前邊
20                     while (true && i < j)//j不能無限制的小下去
21                     {
22                         if (arrea[j] <= temp)
23                         {
24                             arrea[i] = arrea[j];
25                             break;
26                         }
27                         else
28                         {
29                             j--;
30                         }
31                     }
32                     //從前往後,找一個比temp大的數字,放入後邊剛剛調走的地方
33                     while (true && i < j)
34                     {
35                         if (arrea[i] > temp)
36                         {
37                             arrea[j] = arrea[i];
38                             break;
39                         }
40                         else
41                         {
42                             i++;
43                         }
44                     }
45                 }
46                 //跳出循環,現在i==j,i是中間位置 
47                 arrea[i] = temp;
48                 //對第一次大循環後的序列的左右兩個區間分別進行排序
49                 QuickSort(arrea, left, i - 1);//對左邊進行排序
50                 QuickSort(arrea, i + 1, right);//對右邊進行排序
51             }
52         }
53         static void Main(string[] args)
54         {
55             int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48 };
56             QuickSort(data, 0, data.Length - 1);
57             foreach (var item in data)
58             {
59                 Console.WriteLine(item);
60             }
61             Console.ReadKey();
62         }
63     }

 

    


 

 

 

                                                  ***********************未待完續,持續更新****************************

 

 

 

---恢復內容結束---

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved