直接插入排序
来源:互联网 发布:二维编程雕刻机 编辑:程序博客网 时间:2024/06/10 08:18
排序就是把一组数据,按关键字排成有序数列。根据储存位置的不同分为内部排序和外部排序,在这里首先介绍内部排序。内部排序根据排序算法或逻辑分为:
- 插入排序:直接插入排序、希尔排序;
- 选择排序:简单选择排序、堆排序;
- 交换排序:冒泡排序、快速排序;
- 归并排序;
- 基数排序。
接下来对每种排序方法的思想进行介绍,并代码实现,以及分析其时间复杂度、空间复杂度和稳定性。
直接插入排序
把一个需要排序的数组分为已排序好的部分和未排序的部分,从未排序部分获取一个关键字作为待排序数,从已排序部分找到合适位置,插入这个数据。
如上图所示的具体例子,我们给出一个数组,首先单独的一个5是有序的;
接下来待排序的是1,赋值给临时变量tmp,5和1比较,5>1,将5后移,再将tmp赋给第一个元素,此时前两个元素是有序的;
接下来待排序的是3,赋值给临时变量tmp,5和3比较,5>3,将5后移,1再和3比较,1<3,然后将tmp赋给第二个个元素,此时前三个元素是有序的;
以此类推,直到全部有序。
代码实现如下:
#include<stdio.h>void InsertSort(int arr[],int len){ int i; int j; int tmp; for(i=1;i<len;i++) { tmp = arr[i]; for(j=i-1; j>=0 && arr[j]>tmp; --j) { arr[j+1] = arr[j]; } arr[j+1] = tmp; }}void InsertSort(int arr[], int len){ int i, j; for (i = 2; i < len; ++i) { arr[0] = arr[i];//arr[0]哨兵位,相当于tmp的作用 for (j = i - 1; arr[j] > arr[0]; --j) { arr[j + 1] = arr[j]; } arr[j + 1] = arr[0]; }}
从空间来看,它只需要一个记录的辅助空间,空间复杂度为O(1);
从时间来看,排序的基本操作为:比较两个关键字的大小和移动记录,时间复杂度为O(n^2)。
交换的条件为arr[j]>tmp,在两个数相等时不交换顺序,所以该算法是稳定的。
缺点:数据多时,移动数据花费大量时间。
适用于数据少且较有序时。
阅读全文
1 0
- 插入排序--直接插入
- 插入排序------直接插入
- 插入排序---直接插入
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入排序
- 插入排序-直接插入排序
- Avro在讯飞大数据开放平台的应用
- Linux ps查看进程状态及进程死锁问题的查看
- C#中字符数组,字节数组和string之间的转化
- 解决Windows对JDK默认版本切换问题
- 20170828Link
- 直接插入排序
- 如何写静态tableView页面
- 聊聊架构设计
- MongoDB可视化图形界面mongo-express/adminMongo安装过程
- 基于IDEA的aspectj项目demo
- IntelliJ IDEA
- Java注解-三种內建注解
- 【已解决】为什么Python打印数据显示为b‘XXX’格式
- IIC总线、SPI总线、串口232通信、422通信、485通信、TCP/IP协议