数据结构书本上调用两个函数的两个函数的快排四个测试点全部RE,改成了一个函数第一个点AC,其他三个点还是RE,参考了大佬的代码后AC!!!
#include<bits/stdc++.h>
using namespace std;
int n,a[1000001];
void qsort(int l,int r) {
int mid=a[(l+r)/2];
int i=l,j=r;
while(i<j) {
while(a[i]<mid) i++;
while(a[j]>mid) j--;
if(i<=j) {
swap(a[i],a[j]);
i++;
j--;
}
}
if(l<j) qsort(l,j);
if(i<r) qsort(i,r);
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
qsort(1,n);
for(int i=1; i<=n; i++) cout<<a[i]<<" ";
}
全部RE源代码
#include<bits/stdc++.h>
using namespace std;
int arr[10050];
int partition(int left, int right)
{
int i = left + 1 ;
int j = right;
int temp = arr[left];
while(i <= j)
{
while (arr[i] < temp)
{
i++;
}
while (arr[j] > temp )
{
j--;
}
if (i < j)
swap(arr[i++], arr[j--]);
else i++;
}
swap(arr[j], arr[left]);
return j;
}
void quick_sort(int left, int right)
{
if (left > right)
return;
int j = partition(left, right);
quick_sort( left, j - 1);
quick_sort(j + 1, right);
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
quick_sort(0,n-1);
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
第一个测试点AC的源代码
#include<bits/stdc++.h>
using namespace std;
int array[10050];
void QuickSort( int start, int last)
{
int i = start;
int j = last;
int temp = array[i];
if (i < j)
{
while (i < j)
{
//
while (i < j && array[j]>=temp )
j--;
if (i < j)
{
array[i] = array[j];
i++;
}
while (i < j && temp > array[i])
i++;
if (i < j)
{
array[j] = array[i];
j--;
}
}
//把基准数放到i位置
array[i] = temp;
//递归方法
QuickSort( start, i - 1);
QuickSort( i + 1, last);
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>array[i];
}
QuickSort(0,n-1);
for(int i=0;i<n;i++)
{
cout<<array[i]<<" ";
}
return 0;
}