第一部分 理论知识
·分类
分为直接插入排序,二分插入排序(这般插入排序),链表插入排序,希尔排序(缩小增量排序)。属于稳定排序。所有的记录插入完为止,得到一个新的有序序列。
·内部排序和外部排序
根据排序过程中涉及的存储器不同,可以讲排序方法分为两大类:一类是内部排序,指的是待排序的几率存放在计算机随机存储器中进行的排序过程;另一类的外部排序,指的是排序中要对外存储器进行访问的排序过程。
内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原则可以将它们分为5类:插入排序、交换排序、选择排序、归并排序和基数排序;根据排序过程的时间复杂度来分,可以分为三类:简单排序、先进排序、基数排序。
评价排序算法优劣的标准主要是两条:一是算法的运算量,这主要是通过记录的比较次数和移动次数来反应;另一个是执行算法所需要的附加存储单元的的多少。
·直接插入排序的算法思路
(1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
· 排列过程
假如有一串数字 8 9 4 6 7 3 2 1 10 5 十个数字进行直接插入法排序
直接插入排序就是将无序区的数据,在和有序区比较之后放在其合适的位置。插入算法更像是一个正的直角三角形,是一个用有序区组成的直角三角形。
· 代码实现(c#)
class 冒泡排序
{
//定义一个数组
static List<int> list = new List<int>() {8,9,4 ,6, 7,3,2,1,10,5 };
static void Main(string[] args)
{
//调用排序方法
Bubble();
PrintList();
}
//冒泡排序
static void Bubble()
{
//定义临时变量
int temp = 0;
for (int i = list.Count; i > 0; i--)
{
for (int j = 0; j < i-1; j++)
{
//相邻的两个数进行比较,把较大的数放到后面
if (list[j] >list[j+1])
{
//交换数据
temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
}
private static void PrintList()
{
foreach (var item in list)
{
Console.WriteLine(string.Format("{0}", item));
}
Console.WriteLine();
Console.ReadLine();
}
}
·总结
老师讲了那么多的算法,都没有认真的去实现一遍挺愧疚。别忘了出来混,迟早要还的。看现在到了还账的时间了吧。当初没有好好学的,软考是都要考滴。要想比别人优秀,就要比别人多付出。啊哈,算法!终于遇见你~