灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2942回复:0

[C++技术]C++快排

楼主#
更多 发布于:2013-05-25 14:59
最近在看算法导论,就实现了一些简单的算法!

核心是分治

首先先完成交换两个值的函数,

然后完成分割操作

最后确定递归条件!


[cpp] int exchange(int A[],int i,int j)
{
    int temp    = A;
    A        = A[j];
    A[j]    = temp;
    return 0;
}
int Partion(int A[],int p,int r)
{
    int x= A[r];
 
    int i = p-1;
 
    for (int j = p; j < r; j++)
    {
        if (A[j]<=x)
        {
            i = i+1;
            exchange(A,i,j);
        }
    }
    exchange(A,i+1,r);
    return i+1;
}
 
void QuickSort(int A[],int p,int r)
{
    if (p<r-1)
    {
        int q = Partion(A,p,r);
        QuickSort(A,p,q-1);
        QuickSort(A,q+1,r);
    }
}

int exchange(int A[],int i,int j)
{
 int temp = A;
 A  = A[j];
 A[j] = temp;
 return 0;
}
int Partion(int A[],int p,int r)
{
 int x= A[r];

 int i = p-1;

 for (int j = p; j < r; j++)
 {
  if (A[j]<=x)
  {
   i = i+1;
   exchange(A,i,j);
  }
 }
 exchange(A,i+1,r);
 return i+1;
}

void QuickSort(int A[],int p,int r)
{
 if (p<r-1)
 {
  int q = Partion(A,p,r);
  QuickSort(A,p,q-1);
  QuickSort(A,q+1,r);
 }
}

 

测试快排的代码:
[cpp] int A[10]={2,3,4,5,6,7,8,9,0,1};
 
QuickSort(A,0,9);
 
    for (int i = 0; i <10; i++)
    {
        cout<<A<<"\t";
    }
    cout <<endl;

int A[10]={2,3,4,5,6,7,8,9,0,1};

QuickSort(A,0,9);

 for (int i = 0; i <10; i++)
 {
  cout<<A<<"\t";
 }
 cout <<endl;

喜欢0 评分0
游客

返回顶部