编写算法,对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前

/*2018.11
*数据结构与算法-第8章习题T3算法设计题
*(4)编写算法,对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前
*要求:1.采用顺序存储结构,至多使用一个记录的辅助存储空间;
      2.算法的时间复杂度为o(n)(即使用快速排序)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef int elemtype;

typedef struct
{
	elemtype *elem;
	int length;
}Sqlist;

void initList(Sqlist &list,int n)/*创建顺序存储数组*/
{
	list.elem=new int[n+1];
	if(!list.elem)
		return;
	list.length=n;
}

void ListInsert(Sqlist &list,int i,int num)/*插入数据*/
{
	if(i<1)return;
	list.elem[i]=num;
}

void outputList(Sqlist list)/*输出顺序存储的数组*/
{
	for(int i=1;i<=list.length;i++)
	{
		printf("%4d",list.elem[i]);
		if(i%10==0)
			printf("\n");
	}
	printf("\n");
}

int partition(Sqlist &list,int low,int high)/*排序函数1*/
{
	elemtype temp;
	list.elem[0]=list.elem[low];
	temp=list.elem[low];
	while(low<high)
	{
		while(low<high && list.elem[high]>=temp)
			--high;
		list.elem[low]=list.elem[high];
		while(low<high && list.elem[low]<=temp)
			++low;
		list.elem[high]=list.elem[low];
	}
	list.elem[low]=list.elem[0];
	return low;
}

void qsort(Sqlist &list,int low,int high)/*排序函数2*/
{
	int mid;
	if(low<high)
	{
		mid=partition(list,low,high);
		qsort(list,low,mid-1);
		qsort(list,mid+1,high);
	}
}

void quicksort(Sqlist &list)/*快速排序*/
{
	qsort(list,1,list.length);
}

int main()/*主函数*/
{
	Sqlist list1;

	int num,input;
	printf("请输入需要输入的数的个数:");
	scanf("%d",&num);

	if(num!=0)
	{
		initList(list1,num);
		printf("请输入需要输入的数据:\n");
		for(int i=1;i<=num;i++)
		{
			scanf("%d",&input);
			ListInsert(list1,i,input);
		}
	
		printf("\nBefore sorted:\n");
		outputList(list1);
		quicksort(list1);
		printf("After sorted:\n");
		outputList(list1);
	}
	else
		printf("\n输入的个数为0!\n");
	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值