C#之简单算法
2018-12-05 本文已影响46人
赤色黎明_9970
排序:
排序的目标:获得有序序列以供便捷操作数据
排序策略:计算机不能像人那样通览所有数据,只能依据两两比较的结果来解决排序问题这个步骤是重复的:
1.比较两个数据项。
2.交换两个数据项或复制其中一个。
每种具体排序算法的实现细节不同。
冒泡排序:
冒泡排序运行起来非常慢,但在概念上排序算法中最简单的,在刚开始研究排序时也是一种很好的排序算法
算法描述:
1.比较两个数据项
2.如果左边的数据项大,交换两个数据项
3.向右移动位置重复1、2步
编码的关键点:
1.需要冒泡的趟数
2.如何控制两两比较:i-1,i,i+1
3.如何优化不和已冒泡的最大值进行比较
3 6 2 10 8
第一趟:
3 2 6 10 8
3 2 6 8 10
第二趟:
3 2 6 8 10
第三趟:
3 2 6 8 10
第四趟:
2 3 6 8 10
代码如下:
冒泡排序为一个既有数字又有小写字母的字符串进行字符排序。
//要求使用冒泡排序:
选择排序:
选择排序改进了冒泡排序,冒泡是比较完就交换,而选择排序则是选出最小的才交换,交换次数最小。
算法描述:
1.扫描整个序列
2.从中挑出最小的数据项
3.将最小的数据项放置到合适的位置
6 5 4 7
假设第一个最小
验证是否最小
6 5
记忆最新的最小位置 5
重复以上2步到数组末尾。
最小的位置被找到。
0索引和2索引交换位置。
如此循环选择n-1次 程序结束。
代码如下:
例子:
为一个既有数字又有大小写字母的字符串进行字符排序。
///大小写字母排序时需要注意只比较字母的先后次序
///例:1CaD =>1aCD
///要求使用选择排序
插入排序:
插入排序是简单排序里最好的一种,但是稍微麻烦一些
算法描述:
1.假设部分有序(一般设第一个数据项为第一部分)
2.其他输入依次插入之前的有序序列
若序列基本有序 此排序算法最优
要注意为待插入元素找到合适位置
1 2 4 3 5
[1 2 4] 3 5
// 监视哨:
5 7 3 1 2
假设第一部分已经有序
5 7 3 1 2
5 7 3 1 2
int temp = 3;
5 " " 7 1 2
" " 5 7 1 2
3 5 7 1 2
1 2 3 7 5
插入排序分为两种,一种是带监视哨的,一种是不带监视哨的。
监视哨:
不带监视哨:
例子:
对象数组的插入排序怎么做?
首先建立一个Person对象,实现IComparable接口快速排序:
快速排序是高级排序里最流行的一种,大多数情况下都是最快的.
算法描述:
1.把序列划分为两个部分:左边较小的部分和右边较大的部分.
2.调用自己为左边排序.3.调用自己为右边排序.
要注意算法描述和递归的应用.
50 32 77 43 78 67
代码如下:
快速一快速二