在有序数组中插入元素并利用该方法进行插入排序

这个方法必须是在有序数组中进行插入,所以插入前要先排序。

template<class T>
void insert(T a[],int& n,const T& x)
{
	int i;
	for (i=n-1;i>=0&&x<a[i];i--)
	{
		a[i+1]=a[i];
	}
	a[i+1]=x;
	n++
}

这个代码从数组的最后一位即n-1位元素开始进行操作,首先将其与x进行比较,如果比x大,那么将其往后移一位,

然后再将n-2的元素与x进行比较,如果比x大则将其移到n-1的位置,如此下去,当n-k位置的元素比x小的时候,那么就

把x放到n-k+1的位置,也就是放到a[i+1]的位置。这样插入就完成了。

这里有一点要注意的,那就是数组a的容量一定要大于n,不然会出问题的,因为最后一位元素没位子供他往后移了。


下面介绍一种插入排序方法:

template<class T>
void insertionSort(T a[],int n)
{
	for(int i=1;i<n;i++)
	{
		T t=a[i];
		insert(a,i,t);
	}
}
不好意思,代码就只有这么点。我们将数组a分成两个部分,一个部分称为有序部分,另一个称为无序部分,最开始,有序部分只有a[0]这一个元素,无序部分为后面所有的元素。首先将无序部分的第一个元素a[1]作为我们第一个要插入的元素,a[0]作为被插入的有序数组,那么insert(a,1,a[1])就是将a[1]插入到有序数组a[0]里面,这时有序数组变为a[0:1],无序部分减少一个,接下来以同样的方式将无序部分的a[2]插入到有序部分的a[0:1],那么有序部分变为a[0:2],无序部分减少以,一直下去,知道无序部分变为0,即完成插入排序。


猜你喜欢

转载自blog.csdn.net/du_shuang/article/details/81026243