三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> C# -> C#中的个别排序方法 -> 正文阅读
 

[C#]C#中的个别排序方法

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

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# 最新文章
字符串阵列分别输出元素的索引,原值和长度
格式化你的字符串
C#宣告一个变量
C#中级
拆分一个字符串并把每个字符单独输出
通过手机号定位归属地
一个对称加密、解密的方法C#工具类
C#实现盛大盛付通充值卡状态查询
[.NET] SQL数据分页查询
类型的各种成员
上一篇文章      下一篇文章      查看所有文章
加:2016-10-23 18:11:14  更:2017-05-14 19:34:24 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年2日历
2018-2-19 16:18:10
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库