P1177快排的优化

题目链接

数据结构书本上调用两个函数的两个函数的快排四个测试点全部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;
}

大佬AC代码

发布了12 篇原创文章 · 获赞 12 · 访问量 460

猜你喜欢

转载自blog.csdn.net/weixin_44417475/article/details/103979127
今日推荐