常见的排序算法之直接插入排序算法

直接插入排序又称简单插入排序,它是基本的排序算法之一。

举例分析排序思想

有如下六个数字:4,9,6,5,8,7。用直接插入排序算法对其进行排序,以递增顺序为例。

                                         

1.在序列中取出9与4进行比较,4<9,因此9插在4后边

                                         

2.在序列中取出6与9进行比较,6<9,因此6插在9的前边,9往后移动;比较4和6,6>4,位置不变。

                                             

3.在序列中取出5与9进行比较,5<9,因此5插在9的前边,9往后移动;将取出的5与6进行比较,5<6,因此5插在6的前边,6往后移;5和4进行比较,5>4位置不变。

                                        

4.在序列中取出8与9进行比较,8<9因此8插在9的前边,9往后移动;将取出的8与6进行比较,8>6,因此位置不变;由于之间对6进行排序时,6之前的数字都小于6,因此不再对8进行任何比较。

                                         .

5.在序列中取出7与9进行比较,7<9因此8插在9的前边,9往后移动;将取出的7与8进行比较,7<8,因此7插在8前边,8往后移动;将取出的7与6进行比较,7>6,因此位置不变;由于之间对6进行排序时,6之前的数字都小于6,因此不再对8进行任何比较。

                          

由以上1.2.3.4.5步骤可得到已知序列的递增序列:4,5,6,7,8,9。

代码实现

#include <stdio.h>
#include <string.h>
#include <stdlib.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; j--)
		{
			if (arr[j] <= tmp)
			{
				break;
			}
			arr[j + 1] = arr[j];
		}
		arr[j + 1] = tmp;
	}
}

int main()
{	
    int arr[] = { 4, 9, 6, 5, 8, 7 };
	InsertSort(arr, sizeof(arr) / sizeof(arr[0]));
}

时间复杂度和空间复杂度

插入排序的时间复杂度为O(n^{2}),空间复杂度为O(1)

简单小结

插入排序的基本步骤:1)找位置  2)移数据 3)插入

插入排序是一种常见的基本的排序算法,而且序列越有序越快。在序列完全有序的情况下时间复杂度可达到O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值