|
|
| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | | ||||
|
|
||||||||
|
||||||||
|
|||||
| Visual C# 诠释常用排序算法 | |||||
作者:未知 文章来源:CnXHacker.Net 点击数: 更新时间:2006-11-5 ![]() |
|||||
|
1. 插入排序 1.1. 基本思想: 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。 1.2. 排序过程: 【示例】: [初始关键字] [49] 38 65 97 76 13 27 49 (38) [38 49] 65 97 76 13 27 49 (65) [38 49 65] 97 76 13 27 49 (97) [38 49 65 97] 76 13 27 49 (76) [38 49 65 76 97] 13 27 49 (13) [13 38 49 65 76 97] 27 49 (27) [13 27 38 49 65 76 97] 49 (49) [13 27 38 49 49 65 76 97] 1.3. 程序实现 <summary> /// 插入排序算法 /// </summary> /// <param name="dblArray"></param> static void InsertSort(ref double[] dblArray) { for(int i = 1 ; i < dblArray.Length ; i++) { int frontArrayIndex = i-1 ; int CurrentChangeIndex = i ; while(frontArrayIndex>=0) { if(dblArray[CurrentChangeIndex] < dblArray[frontArrayIndex]) { ChangeValue(ref dblArray[CurrentChangeIndex],ref dblArray[frontArrayIndex]); CurrentChangeIndex = frontArrayIndex ; } frontArrayIndex--; } } } /// <summary> /// 在内存中交换两个数字的值 /// </summary> /// <param name="A"></param> /// <param name="B"></param> static void ChangeValue (ref double A ,ref double B) { double Temp = A ; A = B ; B = Temp ; } 2. 选择排序
3. 冒泡排序 4.1. 基本思想: 在当前无序区R[1..H]中任取一个数据元素作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。 4.2. 排序过程: 【示例】: 初始关键字 [49 38 65 97 76 13 27 49] 第一次交换后 [27 38 65 97 76 13 49 49] 第二次交换后 [27 38 49 97 76 13 65 49] 第三次交换后 [27 38 13 97 76 49 65 49] 第四次交换后 [27 38 13 49 76 97 65 49] [27 38 13 49 76 97 65 49] (一次划分过程) 初始关键字 [49 38 65 97 76 13 27 49] 一趟排序之后 [27 38 13] 49 [76 97 65 49] 二趟排序之后 [13] 27 [38] 49 [49 65]76 [97] 三趟排序之后 13 27 38 49 49 [65]76 97 最后的排序结果 13 27 38 49 49 65 76 97 各趟排序之后的状态 4.3. 程序实现 /// <summary> /// 快速排序法 /// </summary> /// <param name="dbArray"></param> /// <param name="StartIndex"></param> /// <param name="EndIndex"></param> private static void QuickSort( ref double[] dbArray ,int StartIndex ,int EndIndex) { //基数 int CurrentIndex = StartIndex ; //顺序查找 bool IsOrderSearched = true ; //反序查找 bool IsDisOrderSearched = true ; while(IsOrderSearched || IsDisOrderSearched) { IsDisOrderSearched = false ; IsOrderSearched = false ; for(int i =EndIndex ; i>CurrentIndex ;i--) { if(dbArray[i] < dbArray[CurrentIndex]) { ExChangeValue(ref dbArray[i] ,ref dbArray[CurrentIndex]); CurrentIndex = i ; IsDisOrderSearched = true ; break ; } } for(int i = StartIndex ; i < CurrentIndex ; i++) { if(dbArray[i] > dbArray[CurrentIndex]) { ExChangeValue(ref dbArray[i] ,ref dbArray[CurrentIndex]); CurrentIndex = i ; IsOrderSearched = true ; break ; } } } if( EndIndex - StartIndex > 0 ) { if(CurrentIndex != StartIndex ) { QuickSort(ref dbArray ,StartIndex,CurrentIndex -1); } if(CurrentIndex != EndIndex) { QuickSort(ref dbArray ,CurrentIndex+1,EndIndex); } } } /// 交换数据 /// </summary> /// <param name="A"></param> /// <param name="B"></param> private static void ExChangeValue(ref double A , ref double B) { double Temp = A ; A = B ; B = Temp ; } 5. 堆排序
5.4. 程序实现 /// <summary> /// 小根堆排序 /// </summary> /// <param name="dblArray"></param> /// <param name="StartIndex"></param> /// <returns></returns> private static void HeapSort(ref double[] dblArray ) { for(int i = dblArray.Length -1 ; i >= 0; i--) { if(2*i+1<dblArray.Length) { int MinChildrenIndex = 2*i+1 ; //比较左子树和右子树,记录最小值的Index if(2*i+2 < dblArray.Length ) { if(dblArray[2*i+1]>dblArray[2*i+2]) MinChildrenIndex = 2*i+2; } if(dblArray[i] > dblArray[MinChildrenIndex]) { ExchageValue(ref dblArray[i],ref dblArray[MinChildrenIndex]); NodeSort(ref dblArray ,MinChildrenIndex); } } } } /// <summary> /// 节点排序 /// </summary> /// <param name="dblArray"></param> /// <param name="StartIndex"></param> private static void NodeSort(ref double[] dblArray,i |
|||||
| 文章录入:IceRiver 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!) |
| 关于我们 - 版权声明 - 帮助(?) - 广告服务 - 联系我们 - 友情链接 - 用户注册 - | Powered by ICE RIVER - STUDIO |
| » CnXHacker.CoM | © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved. |