直接插入排序
2015-11-17 13:25
225 查看
直接插入排序(straight insertion sort)的做法是: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 直接插入排序属于稳定的排序,最坏时间复杂性为O(n^2),空间复杂度为O(1)。 直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。 值得注意的是,我们必需用一个存储空间来保存当前待比较的数值,因为当一趟比较完成时,我们要将待比较数值置入比它小的数值的后一位 插入排序类似玩牌时整理手中纸牌的过程。插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。 #include<stdio.h> #include<stdlib.h> int main() { int arr[] = { 8, 3, 10, 4, 50 }; int size = sizeof(arr) / sizeof(arr[0]); int i, j, temp; for (i = 1; i < size; i++) { j = i - 1; temp = arr[i]; while (j >= 0 && temp < arr[j]) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = temp; } for (j = 0; j < size; j++) { printf("%d ", arr[j]); } system("pause"); return 0; }
相关文章推荐
- Windows7下获得System权限问题解决方法
- Ruby中require、load、include、extend的区别介绍
- 安装软件 Nullsoft Install System 2.27汉化版 下载
- vbscript include的办法实现代码第1/2页
- 解析C++编程中的#include和条件编译
- PHP脚本中include文件出错解决方法
- Could not load type System.ServiceModel.Activation.HttpModule解决办法
- PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
- Flex include和import ActionScript代码
- PHP中return 和 exit 、break和contiue 区别与用法
- set_include_path在win和linux下的区别
- php include加载文件两种方式效率比较
- How to Auto Include a Javascript File
- 浅析return false的正确使用
- javascript中return,return true,return false三者的用法及区别
- 浅谈ASP.NET的include的使用方法
- oracle忘记sys/system/scott用户密码的解决方法
- java/jsp中 中文问题详解
- php相对当前文件include其它文件的方法
- JSP计数器的制作