PTA 排序(快速排序,基数排序)

本文介绍了PAT考试中的排名生成问题,该问题涉及到排序算法的应用。首先,文章概述了快速排序的基本原理和C++实现,接着解释了基数排序的概念,它是桶排序的一种优化。在给定的样例输入和输出中,展示了如何根据得分和提交记录生成排名。解决方案包括将数据整理成结构体,并利用STL的sort函数进行排序,同时注意排序函数的编写和结构体数组的声明方式。此外,文章强调了在处理过程中初始化标志变量、处理重复满分成绩等问题的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序
在一堆数中选取一个主元,以主元为中心将这堆数分为大小两部分,对这两部分递归调用快排,最后当规模最够小的时候(小于预设的阈值CutOff)将使用简单排序(如插入排序)。

/*快速排序*/
//取主元 get pivot
long Median3(long a[], long Left, long Right)
{
   
   
	int Center = (Right +Left)/2;
	if (a[Left] > a[Center])
		Swap(&a[Left] , &a[Center]);
	if (a[Left] > a[Right])
		Swap(&a[Left], &a[Right]);
	if (a[Center] > a[Right])
		Swap( &a[Center] , &a[Right]);

	Swap(&a[Center], &a[Right - 1]);//把Povit藏到Right-1
	return a[Right - 1];
}
//快速排序
void QuickSort(long a[], int Left, int Right)
{
   
   	
	long Pivot;//主元
	int i, j;

	int CutOff = 10e2;
	if (CutOff <= Right - Left)
	{
   
   
		Pivot = Median3(a, Left, Right);
		i = Left; //左边指针
		j = Right - 1; //右边指针

		for (;;)
		{
   
   
			while (a[++i] < Pivot) {
   
   }
			while (a[--j] < Pivot) {
   
   }
			if (i < j)
				Swap(&a[i], &a[j]);
			else
				break;
		}
		Swap(&a[i], &a[Right - 1]); //Pivot 落位
		QuickSort(a, Left, i - 1);
		QuickSort(a, i + 1, Right);
	}
	else
		Insertion_sort(a+Left, Right - Left+1);
}
//统一接口
void Quick_sort(long a[],int N)
{
   
   
	QuickSort(a, 0, N - 1);

}
/*快速排序结束*/

快排c++背诵版:

class Solution {
   
   
public:
    vector<int> sortArray(vector<int>& nums) {
   
   
        int n = nums.size();
        quick_sort(nums,0,n-1,n);
        return nums;
    }
    void quick_sort(vector<int>& nums,int left,int right,int n)
    {
   
   
        if(left < right) //分裂到最小单位即停止
        {
   
   
            int pivotpos = partition(nums,left,right);
            quick_sort(nums,left,pivotpos-1,n);
            quick_sort(nums,pivotpos+1,right,n);
        }
    }

    int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值