算法导论学习随笔——第七章 快速排序
人这玩意果然是三分钟热度……废话就不写了,一步步来吧。
快速排序:worstcase O(n2)
expected time complexity:O(nlgn)
快排的思路:分治法,分解—>解决(递归)—>合并(不需要,原址排序)
伪代码:
quicksort(A,p,r)
if p<r
q=partition(A,p,r);
quicksort(A,p,q-1);
quicksort(A,q+1;r);
partition(A,p,r)
q=A[r];
i=p-1;
for j from p to r-1
if A[j]<=q
i++;
exchange A[i] with A[j];
exchange A[i+1] with A[r]
return i+1
注意:quicksort调用时分情况为p—q-1与q+1—r;A[q]不必加入(否则会被多次利用重复出错)
oj 1032:quicksort
代码如下
#include<iostream>
using namespace std;
int partition(int a[],int p,int r)
{
int q=a[r];
int s=p-1;
for (int i=p;i<r;i++)
{
if (a[i]<=q)
{
s++;
int temp=a[s];
a[s]=a[i];
a[i]=temp;
}
}
int temp=a[r];
a[r]=a[s+1];
a[s+1]=temp;
return s+1;
}
void quicksort(int a[],int p,int r)
{
if (p<r)
{
int q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
}
int main()
{
int a[100];
int n;
while(cin>>n)
{
for (int i=0;i<n;i++)
cin>>a[i];
quicksort(a,0,n-1);
for (int i=0;i<n;i++)
{
cout<<a[i];
if (i!=n-1) cout<<" ";
}
cout<<endl;
}
return 0;
}
剩下的证明啊分析啊下次吧……
posted on 2014-05-15 16:59 giddens lee 阅读(183) 评论(0) 收藏 举报
浙公网安备 33010602011771号