插入排序法
2016-05-07 20:44
211 查看
插入排序法
插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。
假设:我们输入的是 “5,1,4,2,3”。
我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3”
接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3"我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。
再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了 “1,2,4,5,3”
最后,我们检查第五个数字,这个数字是3,3必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了 “1,2,3,4,5”排序因此完成了。
所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。
这里使用C#实现了一下,具体代码如下:
插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。
假设:我们输入的是 “5,1,4,2,3”。
我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3”
接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3"我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。
再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了 “1,2,4,5,3”
最后,我们检查第五个数字,这个数字是3,3必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了 “1,2,3,4,5”排序因此完成了。
所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。
这里使用C#实现了一下,具体代码如下:
<span style="font-size:24px;">namespace ConsoleApplication1 { class Program { //定义一个泛型集合 //要求从大到小排序 static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 9 }; static void Main(string[] args) { bubble(); } //排序 static void bubble() { //总共要比较的趟数 for (int i = 1; i < list.Count; i++) { //定义一个变量 //用于存放位置为i的那个元素,即寻找合适位置的那个元素 int temp = list[i]; //从这个数的位置开始,依次和它的前一个数进行比较 int j = i; //每趟中要比较的次数 //依次比较当前位置为j-1的数和temp的大小 //如果当前位置为(j-1)的数比temp小,则把它移到位置为j的地方,然后j-1 //判断j是否大于0 //如果j大于0,继续比较 //如果j小于0,结束比较 //如果当前位置为(j-1)的数比temp大,结束比较 while ((j > 0) && (list[j - 1] < temp)) { list[j] = list[j - 1]; --j; } //temp,应该放到位置为j的地方 list[j] = temp; PrintList(); } Console.ReadKey(); } //输出 static void PrintList() { foreach (var item in list ) { Console.Write(string.Format("{0} ", item)); } Console.WriteLine(); } } } </span>
相关文章推荐
- 结构体的偏移量计算
- Web前端性能优化(二)使用内容分发网络
- CodeForces 598B Queries on a String
- CodeForces 598A Tricky Sum
- Contest 2016-5-7 B(HDU 5616)
- 言叶にできない
- CodeForces 599D Spongebob and Squares
- MySQL在有索引列情况下 和 无索引情况下 select *的输出结果顺序
- Android半透明背景
- 小さな手のひら
- ASP.NET中数据库数据导入Excel并打印
- 学习进度条九
- CodeForces 599C Day at the Beach
- HDU A+B类型
- 周记一发
- C++第五次上机实验
- jQuery事件相关方法
- 女性的转变
- Asp.net中Request.Url的各个属性对应的意义介绍
- 构建之法阅读笔记06