目录
插入排序一般也被称为直接插入排序
对于少量元素的排序,它是一个有效的算法
对于大量元素的排序,则效率很低下
插入排序是一种最简单的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中
成为一个新的,记录数增一的有序表
在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动
当数据量小于等于一时,就默认为有序,因为就一个嘛,排来排去还是它,所以就可以看成是有序的,所以每一个序列有会有一个0号元素,我们就可以把它看成是有序的,根据插入排序的思想,我们就应该将0号元素(有序)后的元素(无序)变到有序的队伍中去,那么0号元素后面有多少个元素需要待插入的呢,假设有n个数据,那么除去有序的0号元素,无序的队伍就是n-1个,那么外层循环的次数也就确定了,即n-1个
所以外层排序也就出来了,需要插入的序列:1~n-1
- #include<iostream>
- #include<string>
- using namespace std;
- void insert_sort(int arr[], int size)//arr[]接收排序数组,size序列长度
- {
- //外层循环
- for (int i; i <= size - 1; i++)
- {
- }
- }
外层循环确定了,那么我们就该确定内层循环了
假设我们正在进行的是升序排序 ,以序列12453为例,假设待插入的元素为3,也就是3需要和1245进行比较,因为是升序,所以3和5比较之后,3,5进行交换位置序列变为12435,在用3和124序列进行比较,总的来说就是无序的往有序中插入,经过不停的插入和交换,最终成为升序或者降序的序列
根据以上思路,即可用代码将插入排序完整表示出来
- #include
- #include
- using namespace std;
- void insert_sort(int arr[], int size)//arr[]接收排序数组,size序列长度
- {
- //外层循环
- for (int i; i <= size - 1; i++)
- {
- //升序
- if (arr[j] > arr[j + 1])
- {
- int temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }