排序算法三——插入排序
来源:互联网 发布:js在线压缩混淆 编辑:程序博客网 时间:2024/06/08 19:52
排序算法三:插入排序
**有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。**
插入排序代码:
/***************************************************** File name:3insert_pai_xu.c Author: Tang Zhiqian Date:2017-08-07 18:45*****************************************************/// 直接插入排序#include <stdio.h>#define MAX 10void print(int arr[]);void insert(int arr[]);int main(){ int arr[MAX] = {5,0,1,6,2,7,3,8,4,9}; int arr1[MAX] = {0,1,2,3,4,5,6,7,9,8}; insert(arr); print(arr); printf("\n\n"); insert(arr1); print(arr1); return 0;}void print(int arr[]){ int i; for (i = 0; i < MAX; i++) { printf("%d ",arr[i]); } printf("\n");}void insert(int arr[]){ int i,j,temp; for (i = 1; i < MAX; i++) //从1开始,往第0个数排序 { temp = arr[i]; if (arr[i - 1] > arr[i]) //如果第i - 1个数大于第i个数,则进行插入操作 { j = i - 1; while(arr[j] > temp && j >= 0) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = temp; print(arr); } }}
程序运行结果:
在这里我定义了两个数组,arr是乱序的,而arr1是基本有序的,两个数组的运行结果可以看到,第一个数组排序打印了6行,第二个打印了2行。这说明插入排序适合给基本有序的数进行排序,越有序则移动插入的次数越少。
阅读全文
0 0
- 排序算法三——插入排序
- 排序—插入排序算法
- 排序算法—插入排序
- 基础排序算法(三)——对半插入排序
- 排序算法(三)——插入排序及改进
- 排序算法自我练习(三)——插入排序
- 一句话明白排序算法之三——插入排序
- 排序算法(三)——插入排序
- 排序算法(三)——插入排序及改进
- 排序算法(三) —— 插入排序
- 排序算法(三)——插入排序及改进
- 排序算法三:插入排序
- 排序算法(三)-插入排序
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
- 数据结构&算法实践—【排序|插入排序】插入排序
- 排序算法—插入排序之直接插入排序
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法——插入排序(直接插入排序、折半插入排序、希尔排序)
- sklearn之决策树实战
- Android事件分发机制详解
- [Leetcode] 337. House Robber III 解题报告
- android 知识点收集
- LINUX 根目录下的 bin boot dev etc 这几个目录
- 排序算法三——插入排序
- 2017年校招全国统一模拟笔试(第四场)编程题集合--Python
- Java设计模式学习——结构型
- 1064. 朋友数
- 374. Guess Number Higher or Lower
- 核心类和类之间的关系
- 正则表达式(Python)
- 把Excel中的数据导入到数据库中并显示在页面
- PostgreSQL 和Greenplum 区别