永利电子游戏网站C#中的个别排序方法

2019-05-03 作者:计算机教程   |   浏览(184)

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 = 1; 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-1; 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     }

 

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

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

 

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

 

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     }

 

 

5.插入排序法

 1     class Program
 2     {
 3         static void InsertSort(int[] arr)
 4         {
 5             for (int i = 0; i < arr.Length; i  )
 6             {
 7                 int temp = arr[i];
 8                 int em = i;
 9                 //让符合(em > 0) && (arr[em - 1] > temp)这个条件的数与前一位数交换。
10                 //而后--em后让之前的满足这个条件的数列重复这个循环,直到不符合条件为止
11                 while ((em > 0) && (arr[em - 1] > temp))
12                 {
13                     arr[em] = arr[em - 1];
14                     --em;//先自减,再使用
15                 }
16                 arr[em] = temp;
17             }
18         }
19         static void Main(string[] args)
20         {
21             int[] arrea = new int[] { 2, 1, 5, 8, 3, 12, 56, 13, 54, 85, 25 };
22             InsertSort(arrea);
23             foreach (var item in arrea)
24             {
25                 Console.WriteLine(item);
26             }
27             Console.ReadKey();
28         }
29     }

 

    


 

                                       #####################################################

                                                                                   ……未待完续……
                                                                            ……若有见解,欢迎补充!……

                                       #####################################################

本文由永利电子游戏网站发布于计算机教程,转载请注明出处:永利电子游戏网站C#中的个别排序方法

关键词: