当前位置:编程学习 > C/C++ >>

根据算法导论写的快速排序

算法导论上面说在选取基准元素是取得最后一个,我用的数据结构课本上面是取第一个;
不过没有原理都是一样的;通过Qartion(int a[],int l,int r)函数将数组a中元素划分为三部分,比a[r]小的,比a[r]大的,a[r];www.zzzyk.com
最后返回基准元素所在的位置;
[cpp] 
#include <stdio.h> 
#include <iostream> 
#include <string.h> 
#include <algorithm> 
#include <math.h> 
using namespace std; 
 const int N=99; 
  int Qartion(int a[],int l,int r) 
 { 
  int tmp=a[r]; 
   int i=l-1; 
   for(int j=l;j<=r-1;j++) 
   { 
    if(a[j]<=tmp) 
    { 
     i++; 
     swap(a[i],a[j]); 
    } 
   } 
   swap(a[i+1],a[r]); 
   return i+1; 
 } 
 void Qsort(int a[],int l,int r) 
 { 
  if(l<r) 
  { 
    int p=Qartion(a,l,r); 
    Qsort(a,l,p-1); 
    Qsort(a,p+1,r); 
  } 
 } 
 int main() 
 { 
      int n; 
      while(~scanf("%d",&n)) 
      { 
         int a[100]; 
         for(int i=0;i<n;i++) 
         { 
          cin>>a[i]; 
         } 
         Qsort(a,0,n-1); 
         for(int i=0;i<n;i++) 
         { 
          cout<<a[i]<<" "; 
         } 
         cout<<endl; 
      } 
     return 0; 
 } 
作者:Java_beginer1
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,