排序之直接插入排序(初体验)
来源:互联网 发布:什么是移动云计算 编辑:程序博客网 时间:2024/05/23 01:20
直接插入排序的基本思想:把待排序数列分成有序区和无序区,初始时有序区为待排序数列的第一个元素,其余部分作为待排序元素。然后,将待排序元素一次一个地加入有序区,直到结束。这样来形成新的有序数列。
/*烟台大学计算机学院作者:景怡乐完成时间:2017年6月5日*/#include <stdio.h>#include <stdlib.h>int main(){ int i,j; int a[10]; for(i=0; i<10; i++) { scanf("%d",&a[i]); } for(i=1; i<10; i++) { int t; t=a[i];//设置哨兵 for(j=i-1; a[j]>t&&j>=0; j--)//寻找插入位置 a[j+1]=a[j];//前一个大于当前,当前等于前一个 a[j+1]=t; } for(i=0; i<10; i++) printf("%d\n",a[i]); return 0;}
初始值 12 15 9 20 6 31 24
第一趟排序结果 12 15 9 20 6 31 24
第二趟排序结果 9 12 15 20 6 31 24
第三趟排序结果 9 12 15 20 6 31 24
第四趟排序结果 6 9 12 15 20 31 24
第五趟排序结果 6 9 12 1 5 20 31 24
第六趟排序结果 6 9 12 15 20 24 31
由上面的代码和实例来看一个具体的过程。例如在第一趟排序完成,开始第二趟排序:此时i=2.设置哨兵 t=r[i];有内循环的for语句,此时j=1且满足条件t<r[j]所以接着执行r[j+1]=r[j];注意此时数列变为 12 12 15 20 6 31 24 再执行j--此时j=0不再满足内循环for语句的t<r[j]于是退出for执行r[j+1]=r[0]即r[0+1]=r[0].到此数列变为9 12 15 20 6 31 24。
在这个程序中一定要注意和明白哨兵的作用——1、它暂存r[i]的值,使之在数列元素移动过程中丢失2、防止查询越界
阅读全文
0 0
- 排序之直接插入排序(初体验)
- 排序之直接插入排序(Java)
- 内部排序之插入排序(直接插入排序,二分插入排序,希尔插入排序)
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 排序之直接插入排序
- 插入排序之直接插入(InsertSort)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- 插入排序之直接插入
- java算法之二直接插入排序(插入排序)
- java之插入排序(直接插入排序)
- 插入排序之直接插入排序(Java篇)
- TensorFlow 资源汇总
- 2017.6.4 入门组 NO.6——树
- 程序中的奇葩事迹
- 表单校验
- 正整数分解质因数
- 排序之直接插入排序(初体验)
- B-1010
- 两数之和
- HDU
- jQuery
- Windows进程通信——命名管道
- HBase最佳实践-用好你的操作系统
- USB Mass Storage
- TaskScheduler解密:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR模式调度解密、Task数据本地性资源分配