【数据结构】天勤线性表35页真题仿造1

设顺序表用数组A[]表示,表中元素存储在数组下标0~m+n-1的范围内,前m个元素递增有序,后n个元素也递增有序,设计一个算法,使得整个顺序表完整。

​
//将链表分为两个表,一个表为已经排序的,一个表为待插入的
void sortLink(int a[], int number1,int number2)
{
	int length = number1 + number2;
	int cur_insertData = number1;//指向待插入的第一个元素
	int now = 0;//这个是算法的优化部分。指向链表A还未处理的部分。链表A处理过的部分,一定小于链表B未处理的部分,所以不用判断这些东西了。

	while (cur_insertData < length&&now<cur_insertData)//排序未完成
	{
		//如果序列2小于序列1,则在序列1的该位置插入序列2的元素
		//首先 序列1的元素集体向后移动1位 然后腾出的位置给序列2的该元素
		//最后inserData移动一位,now也移动一位
		if (a[cur_insertData] < a[now])
		{
			int backup = a[cur_insertData];
			for (int i = cur_insertData - 1; i >= now; i--)
			{
				a[i + 1] = a[i];
			}
			a[now] = backup;
			cur_insertData++;
		}
			now++;
	}
}

​

天勤答案的思路:将表分为两个线性表,线性表A为已经排序的,线性表B中的元素将要插入顺序表A。每次都从表A的末端开始,如果待排序的元素小于A,A的那个位置及其以后就集体向后移。不过我还是感觉我的代码好。

void sortLink2(int a[], int number1, int number2)
{
	for (int i = number1; i < number1 + number2; i++)
	{
		int temp = a[i];
		int j = i - 1;
		while( temp <= a[j] && j >= 0)
		{
			a[j + 1] = a[j];
			j--;
		}
		a[j+1] = temp;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35564841/article/details/81090186