2109 - 找女朋友

找女朋友
Description

山东理工大学有很多学生,当然也有很多美女,机械实验班的学委(外号:大王八)很想找个女朋友,但他想找个身高和自己相配的女生做女朋友,现有理工大N个美女的身高数据,但由于N的值较大,为了尽快找到合适的女友,大王八想请你帮他完成这N个美女的身高排序,按降序排列。
Input

输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
Output

输出只有一行,为这N个数的降序序列,数与数之间用空格隔开。

Sample
Input 

5

1 3 2 5 4

Output 

5 4 3 2 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<time.h>
#include <stdlib.h>
typedef int ElemType;

//初始化表
void arr_Init(int arr[],int len)
{
	int i;
	ElemType x;
	for (i = 0; i <len; i++)
	{
		scanf("%d", &x);
		arr[i] = x;
	}
	//--------------------用随机数测试程序
	//srand(time(NULL));
	//for (int i = 0; i < len; i++)
	//{
	//	arr[i] = rand() % 100;
	//}
}
//打印表中元素
void arr_Print(ElemType *arr,int len)
{
	int i,count=0;
	for (i = 0; i < len; i++)
	{
		if (count != 0)
		{//去掉输出时的第一个的空格,保证输出时每个元素间用空格割开,没有多余的空格
			printf(" ");
		}
		count++;
		printf("%d",arr[i]);
	}
}
//交换两个元素
void swap(ElemType& a, ElemType& b)
{
	ElemType temp;
	temp = a;
	a = b;
	b = temp;
}
//分治
int Partition(int A[], int left, int right)//left和right都是数组的下标
{//扫描所有元素,将最右边的数值作为中位数,将数组分成两部分
/*
从最左边的数开始依次和最右边的数进行对比,
	小的则放到右边(从最右边的位置依次开始放),用k记录要放到哪个位置
	大的不作交换
*/
	int k, j;//k始终指向要被交换的位置,j始终指向扫描到的位置
	for (k = j = left; j < right; j++)
	{
		if (A[j] > A[right])
		{
			swap(A[j], A[k]);
			k++;
		}
	}
	swap(A[k], A[right]);
	return k;//返回值K是中间值的下标
}
//快排
void QuickSort(int A[], int low, int high)
{
	if (low < high)
	{
		int position = Partition(A, low, high);
		QuickSort(A, low, position - 1);
		QuickSort(A, position + 1, high);
	}
}
int main()
{
	int *arr;
	int N;
	scanf("%d", &N);
	arr = (ElemType*)malloc(sizeof(int) * N);
	//输入N个数,将他们存入数值A中,用动态分配地址的方式
	arr_Init(arr, N);
	QuickSort(arr, 0, N-1);
	arr_Print(arr,N);
	return 0;
}


遇到的问题

  1. 不要把数据写死
  2. 出现问题时多用几种不同的测试用例进行调试,查看与题目中输出结果不符的原因
  3. 不同的测试用例:
    1. 输入不同个数的元素值
    2. 每次输入的元素值不同
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值