数据结构排序之插入排序

Posted 码上夏雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构排序之插入排序相关的知识,希望对你有一定的参考价值。

数据结构排序之插入排序

基本思想

当插入第 i ( i > = 1 ) i(i>=1) i(i>=1)个元素的时候,前面的 V [ 0 ] , V [ 1 ] , . . . , V [ i − 1 ] V[0],V[1],...,V[i-1] V[0],V[1],...,V[i1]个元素已经排好序

算法分析

排序码比较次数(KCN)
K C N = ∑ i = 1 n − 1 i = n ( n − 1 ) 2 ≈ n 2 2 KCN = \\sum_{i=1}^{n-1}i=\\frac{n(n-1)}{2}\\approx\\frac{n^2}{2} KCN=i=1n1i=2n(n1)2n2

元素移动次数(RMN)
R M N = ∑ i = 1 n − 1 i + 2 = ( n + 4 ) ( n − 1 ) 2 ≈ n 2 2 RMN = \\sum_{i=1}^{n-1}i+2=\\frac{(n+4)(n-1)}{2}\\approx\\frac{n^2}{2} RMN=i=1n1i+2=2(n+4)(n1)2n2

代码实现

//插入排序
//@param arr 待排序数组
//@param len 待排序数组长度
void InsertionSort(int arr[], int len) {
	int tailIndex = 0; //用于指示已经排好序列结尾的下标
	int curIndex = 0; //用于指示待排数字的下标

	int curValue = 0; //保存待排关键字

	for (curIndex = 1; curIndex < len; curIndex++)
	{
		curValue = arr[curIndex];
		tailIndex = curIndex - 1;

		// 逐一遍历已经排好的序列,如果比待排关键字大就向后移动,直到空出待排关键字的位置
		while (tailIndex >= 0 && arr[tailIndex] > curValue)
		{
			arr[tailIndex + 1] = arr[tailIndex];
			tailIndex--;
		}

		arr[tailIndex + 1] = curValue; //找到位置将待排关键字插入
	}
}

以上是关于数据结构排序之插入排序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法之排序算法:插入排序

面试之插入排序算法

数据结构排序之插入排序

排序02-直接插入排序法

[Java数据结构与算法]简单排序之插入排序

java排序之插入排序(直接插入排序和希尔排序)