为何如此诡异??
  • 板块题目总版
  • 楼主Zhe8468
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/7/16 23:20
  • 上次更新2023/10/27 19:57:27
查看原帖
为何如此诡异??
185348
Zhe8468楼主2022/7/16 23:20

一个普通的快排代码

测试数据

5
5 3 1 2 4

错误版:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100;
int n;
int nums[maxn];
void quick_sort(int left,int right)
{
	int i,j,mid=(left+right)/2;
	i=left,j=right;
	while(i<=j)
	{
		while(nums[i]<nums[mid]) i++;
		while(nums[j]>nums[mid]) j--;
		if(i<=j)
		{
			swap(nums[i],nums[j]);
			i++;
			j--;
		}
	}
	if(left<j) quick_sort(left,j);
	if(right>i) quick_sort(i,right);
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>nums[i];
	quick_sort(0,n-1);
	for(int i=0;i<n;i++) cout<<nums[i]<<" ";
	return 0;
}

下面是修改之后的版本 但是我觉得改了和没改是一样的啊 只是多增加了一个变量保存了中间值????? 正确版:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100;
int n;
int nums[maxn];
void quick_sort(int left,int right)
{
	int i,j,mid=(left+right)/2,flag;
	i=left,j=right;
	flag = nums[mid];
	while(i<=j)
	{
		while(nums[i]<flag) i++;
		while(nums[j]>flag) j--;
		if(i<=j)
		{
			swap(nums[i],nums[j]);
			i++;
			j--;
		}
	}
	if(left<j) quick_sort(left,j);
	if(right>i) quick_sort(i,right);
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>nums[i];
	quick_sort(0,n-1);
	for(int i=0;i<n;i++) cout<<nums[i]<<" ";
	return 0;
}

初学者 我太菜了 希望大佬能指出我的错误

2022/7/16 23:20
加载中...