2011年软考程序员算法实例:快速排序算法

来源:软件水平考试    发布时间:2012-11-05    软件水平考试视频    评论

  代码:

  void QuickSort(int low,int high,int *array)

  {

  int pos;

  if(low{

  pos=SPLIT(low,high,array); //以array[low]进行划分,pos最为划分点

  //前一部分后一部分,反之

  QuickSort(low,pos-1,array); //对划分后的前一部分递归处理

  QuickSort(pos+1,high,array); //对划分后的后一部分递归处理

  }

  }

  int SPLIT(int low,int high,int *array)

  {

  int temp=array[low]; //用temp来记录划分数

  while(low{

  while(array[high]>temp&&low寻找小于temp的数

  high--;

  if(low==high)

  break;

  else

  {

  array[low]=array[high];

  low++;

  }

  while(array[low]寻找大于temp的数

  low++;

  if(low==high)

  break;

  else

  {

  array[high]=array[low];

  high--;

  }

  }

  array[low]=temp; //最终low=high作为划分点,并将划分数存于array[low]

  return low;

  }

  思想:

  就是你从数组中任取一个元素p(可随机取,现在以取第一个为例);

  以P作为主元,对数组 进行划分 ,前一部分小于 P,后一部分大于p;

  最后划分处存储 p;

  然后分别对划分后的前一部分和后一部分递归调用;

  算法平均时间复杂度: O(nlogn)。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答