一个普通的快排代码
测试数据
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;
}
初学者 我太菜了 希望大佬能指出我的错误