数据结构算法题:有一个顺序表L,其元素为整形数据,设计一个算法,将L中所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分。

网上查了这个题的代码,没有任何完整的能正确运行的,因为有点不太懂所以动手随便写了个能运行的调试看过程,分享给需要的朋友。
#include
using namespace std;
#define MaxSize 7
typedef struct
{
	int data[MaxSize];
	int length;
}Sqlist;
void InitList(Sqlist &L)
{
	L.length = 0;
}

void move(Sqlist &L) { //L要改变所以用引用型
	int temp;
	int i = 0, j = L.length-1;
	temp = L.data[i];
	while (i temp)
			j--;
		//j从左往右扫描,当来到第一个比temp小的元素时停止		,并且每走一步都要判断i是否小于j,这个判断容易遗漏。
		if (i < j) { //检测看是否已仍满足i < j,这一步同样很重要
			L.data[i] = L.data[j]; //移动元素。
			i++; //i右移一位。
		}
		while (i < j&&L.data[i] < temp) i++; //与上边的处理类似。
		if (i < j) { //与上边的处理类似。
			L.data[j] = L.data[i]; //与上边的处理类似。
			j--;
		}
		/*关键步骤结束*/
	}
	L.data[i] = temp; //将表首元素放在最终位置。
}
int main()
{
	Sqlist L;
	int k = 0,m=0;
	InitList(L);
	for (k = 0; k < 7; k++)
	{
		cin >> L.data[k];
		L.length++;
	}
	move(L);
	for (m = 0; m < 7; m++)
		cout << L.data[m]<<" ";
	return 0;
}
数据结构算法题:有一个顺序表L,其元素为整形数据,设计一个算法,将L中所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分。_第1张图片

你可能感兴趣的:(c++)