ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:19.52KB ,
资源ID:7263846      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7263846.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新整理c#排序方法.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新整理c#排序方法.docx

1、最新整理c#排序方法 2011.4.11 (1)冒泡排序依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最

2、终完成排序。冒泡排序是一种稳定排序算法。using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 class Program static void Main(string args) int a = 3, 4, 7, 10, 5, 9 ; int b = BubbleSort(a); for (int i = 0; i b.Length; i+) Console.Write(bi.ToString() + ); Cons

3、ole.ReadLine(); public static int BubbleSort(int list) int i, temp; for (int j = 0; j j; i-) if (listj listi) temp = listj; listj = listi; listi = temp; return list; (2)选择排序定位比较交换法:设有10个数分别存在数组元素a0a9中。定位比较交换法是由大到小依次定位a0a9中恰当的值(和武林大会中的比武差不多),a9中放的自然是最小的数。如定位a0,先假定a0中当前值是最大数,a0与后面的元素一一比较,如果a4更大,则将a0、a

4、4交换,a0已更新再与后面的a5a9比较,如果a8还要大,则将a0、a8交换,a0又是新数,再与a9比较。一轮比完以后,a0就是最大的数了,本次比武的武状元诞生了,接下来从a1开始,因为状元要休息了,再来一轮a1就是次大的数,也就是榜眼,然后从a2开始,比出探花,真成比武大会了,当比到a8以后,排序就完成了。 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么

5、交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。public void Sort(int list) /外层循环数组 for(int i=0;ilist.Length-1;i+) / 初始第一个值为最小值 min=i; / 内层循环,从外层循环的数组元素的后一个元素开始 for(int j=i+1;jlist.Length;j+) / 找到最小的那个元素 if(listjlistmin) min=j; / 把最小的元素放到数组的最前面,然后后面的元素继

6、续循环 int t=listmin; listmin=listi; listi=t; (3)插入排序 插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以插入排序是稳定的。public static void insertSort(int temp) int length = temp.length; for

7、 (int i = 1; i length; i+) / 把第一个元素看作一个有序序列,从第二个元素开始遍历 int tempNo = tempi; for (int j = 0; j i; j+) if (tempNo j; k-) / 将其遍历数和比较数之间的数依次向后移动一位 tempk = tempk-1; tempj = tempNo;(4)快速排序 快速排序有两个方向,左边的i下标一直往右走,当ai acenter_index。如果i和j都走不动了,i j。 交换aj和acenter_index,完成一趟快速排序。在中枢元素和aj交换的时候,很有可能把前面的元素的稳定性打乱,比如序

8、列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序不是一个稳定的排序算法,不稳定发生在中枢元素和aj交换的时刻。namespace temp public class QuickSort / / 排序 / / 待排序数组 / 数组第一个元素索引Index / 数组最后一个元素索引Index private static void Sort(int numbers, int left, int right) /左边索引小于右边,则还未排序完成 if (left right) /取中间的元素作为比较基准,小于他

9、的往左边移,大于他的往右边移 int middle = numbers(left + right) / 2; int i = left - 1; int j = right + 1; while (true) while (numbers+i middle) ; if (i = j) break; Swap(numbers, i, j); Sort(numbers, left, i - 1); Sort(numbers, j + 1, right); / / 交换元素值 / / 数组 / 当前左边索引 / 当前右边索引 private static void Swap(int numbers,

10、 int i, int j) int number = numbersi; numbersi = numbersj; numbersj = number; public static void Main() int max = 6, 5, 2, 9, 7, 4, 0 ; Sort(max, 0, max.Length-1); StringBuilder temp =new StringBuilder(); for (int i = 0; i = high)return;mid = (low + high) / 2;MergeSort(low,mid,a);MergeSort(mid+1,hig

11、h,a);i = low;j = mid + 1;k = low;while (i = mid) & (j = high)if (ai = aj)bk = ai;i+;elsebk=aj;j+;k+;while (j = high)/如果第二个中仍然有某些元素追加到新列表的子列表 bk = aj;j+;k+;while (i = mid)/如果在第一个子列表中仍然有一些元素将它们追加到新类别中bk = ai;i+;k+;for (int ii = low; ii =high; ii+)aii=bii; public void display(int a)int n = a.Length;Con

12、sole.WriteLine(排序后的数据:);for (int i = 0; i n; i+) Console.WriteLine(ai);(6)基数排序 基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以基数排序是稳定的排序算法。(7)希尔排序(shell) 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了

13、,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。using System; public class ShellSorter public void Sort(int list) int inc; for (inc = 1; inc 0; inc /= 3) for (int i = inc + 1; i inc) & (listj - inc - 1 t)

14、listj - 1 = listj - inc - 1; j -= inc; listj - 1 = t; public class MainClass public static void Main() int iArrary = new int 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 ; ShellSorter sh = new ShellSorter(); sh.Sort(iArrary); for (int m = 0; m = 13; m+) Console.WriteLine(0, iArrarym); Console.Re

15、adKey(); (8)堆排序 我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n/2-1, n/2-2, .1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序不是稳定的排序算法。#region 堆 / / 建成大

16、堆 / / / / void HeapAdjust(int arr, int i, int length) int child = 2 * i + 1; /左节点 int temp = arri; /中间变量保存当前根节点 while (child length) /如果有右节点,判断是否大于左节点 if (child length - 1 & arrchild = arrchild) break; /不需调整,结束调整 arri = arrchild; /双亲结点值设置为大的子节点值 i = child; child = 2 * i + 1; arri = temp; public void

17、 Heap(int arr) /第一次创建大堆 for (int i = arr.Length / 2 - 1; i = 0; i-) HeapAdjust(arr, i, arr.Length); /元素位置调换 for (int i = arr.Length - 1; i 0; i-) /堆顶与当前堆的最后一个堆元素交换位置 int tmp = arr0; arr0 = arri; arri = tmp; /将剩下的无序堆部分重新建堆处理 HeapAdjust(arr, 0, i); foreach (int v in arr) Console.Write(v.ToString() + ); Console.WriteLine(); #endregion综上,得出结论: 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。还有一些排序算法我没有进行

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1